Непонятно, как использовать Microsoft.AspNetCore.SystemWebAdapters при попытке переноса со старого веб-сайта ASP.NET на C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Непонятно, как использовать Microsoft.AspNetCore.SystemWebAdapters при попытке переноса со старого веб-сайта ASP.NET на

Сообщение Anonymous »

Я создал новое веб-приложение ASP.NET Core 8 MVC и добавил к нему зависимость Microsoft.AspNetCore.SystemWebAdapters.

Код: Выделить всё

Program.cs:
using OldHandlers;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSystemWebAdapters(); // Register SystemWebAdapters

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

// Register SystemWebAdapters middleware
app.UseSystemWebAdapters();

// Define endpoints
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/myhandler", async context =>
{
var adapter = new AspNetCoreHttpContextAdapter(context);
var handler = new MyHandler();
handler.ProcessRequest(adapter);
});
});

app.UseAuthorization();
app.MapRazorPages();

app.Run();
И у меня есть:

Код: Выделить всё

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.SystemWebAdapters;
using System.Threading.Tasks;
using OldHandlers;

public class AspNetCoreHttpContextAdapter : IHttpContextAdapter
{
private readonly HttpContext _context;

public AspNetCoreHttpContextAdapter(HttpContext context)
{
_context = context;
}

public string ResponseContentType
{
get => _context.Response.ContentType;
set => _context.Response.ContentType = value;
}

public void WriteResponse(string content)
{
_context.Response.WriteAsync(content);
}

public async Task ReadRequestBodyAsync()
{
using (StreamReader reader = new StreamReader(_context.Request.Body))
{
return await reader.ReadToEndAsync();
}
}

public void SetStatusCode(int statusCode)
{
_context.Response.StatusCode = statusCode;
}

public object GetRouteData(string key)
{
return _context.Items[key];
}
}
На моем старом веб-сайте я создал новый обработчик:

Код: Выделить всё

public class MyHttpHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
var adapter = new SystemWebHttpContextAdapter(new HttpContextWrapper(context));
var handler = new MyHandler();
handler.ProcessRequest(adapter);
}

public bool IsReusable => false;
}
и:

Код: Выделить всё

using System.IO;
using System.Threading.Tasks;
using System.Web;
using OldHandlers;

public class SystemWebHttpContextAdapter : IHttpContextAdapter
{
private readonly HttpContextBase _context;

public SystemWebHttpContextAdapter(HttpContextBase context)
{
_context = context;
}

public string ResponseContentType
{
get => _context.Response.ContentType;
set => _context.Response.ContentType = value;
}

public void WriteResponse(string content)
{
_context.Response.Write(content);
}

public async Task ReadRequestBodyAsync()
{
using (StreamReader reader = new StreamReader(_context.Request.InputStream))
{
return await reader.ReadToEndAsync();
}
}

public void SetStatusCode(int statusCode)
{
_context.Response.StatusCode = statusCode;
}

public object GetRouteData(string key)
{
return _context.Items[key];
}
}
Я также создал библиотеку .NET Standard 2.0, содержащую конкретную реализацию обработчика:

Код: Выделить всё

namespace OldHandlers
{
public class MyHandler
{
public void ProcessRequest(IHttpContextAdapter context)
{
context.ResponseContentType = "text/plain";
context.WriteResponse("Hello, World!");
}
}
}

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace OldHandlers
{
public interface IHttpContextAdapter
{
string ResponseContentType { get; set;  }
void WriteResponse(string content);
Task ReadRequestBodyAsync();
void SetStatusCode(int statusCode);
object GetRouteData(string key);
}
}
Я не понимаю, что если я использую Microsoft.AspNetCore.SystemWebAdapters, нужно ли мне создавать классы адаптеров AspNetCoreHttpContextAdapter и SystemWebHttpContextAdapter< /code>?
Буду признателен, если кто-нибудь опробует POC. Мне нужна общая библиотека .netStandard между старым веб-сайтом asp.net и новым веб-приложением .NET 8 ASP.NET Core. А HttpContext должен поддерживаться общей библиотекой.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -trying-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»