بررسی قابلیت Endpoint Routing در ASP.NET Core
نویسنده: محمد جواد ابراهیمی
تاریخ: ۱۳۹۸/۰۲/۱۰ ۱۸:۴۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
// ASP.NET Core 2.2
public void Configure(IApplicationBuilder app)
{
app.UseEndpointRouting();
app.OtherMiddleware(); // Access to route values
app.UseMvc();
} // ASP.NET Core 3.0
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.OtherMiddleware();
app.UseEndpoints(endpoints =>
{
// Mapping of endpoints goes here:
endpoints.MapControllers()
endpoints.MapRazorPages()
endpoints.MapHub<MyChatHub>()
endpoints.MapGrpcService<MyCalculatorService>()
});
} public void Configure(IApplicationBuilder app)
{
...
app.UseStaticFiles();
app.UseAuthentication();
app.UseSignalR(hubs =>
{
hubs.MapHub<ChatHub>("/chat");
});
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
} public void Configure(IApplicationBuilder app)
{
...
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chat");
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
} Endpoint xyz contains authorization metadata, but a middleware was not found that supports authorization. Configure your application startup by adding app.UseAuthorization() inside the call to Configure(..) in the application startup code.
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapAreaControllerRoute(
"admin",
"admin",
"Admin/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});
} public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
} // services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
private readonly IActionContextAccessor _actionContext;
public MyClass(IActionContextAccessor actionContext)
{
_actionContext = actionContext;
}
public string GetData()
{
var routes = _actionContext.ActionContext.RouteData;
var val = routes.Values["action"]?.ToString() as string;
return val;
} protected override async Task HandleRequirementAsync(
AuthorizationHandlerContext context,
DynamicPermissionRequirement requirement)
{
if (!(context.Resource is AuthorizationFilterContext mvcContext))
{
return;
}
var actionDescriptor = mvcContext.ActionDescriptor;
actionDescriptor.RouteValues.TryGetValue("area", out var areaName);
var area = string.IsNullOrWhiteSpace(areaName) ? string.Empty : areaName; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
namespace ASPNETCoreIdentitySample.Services.Identity
{
public class DynamicPermissionsAuthorizationHandler : AuthorizationHandler<DynamicPermissionRequirement>
{
private readonly IHttpContextAccessor _httpContextAccessor;
public DynamicPermissionsAuthorizationHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor));
}
protected override async Task HandleRequirementAsync(
AuthorizationHandlerContext context,
DynamicPermissionRequirement requirement)
{
var routeData = _httpContextAccessor.HttpContext.GetRouteData();
var areaName = routeData?.Values["area"]?.ToString();
var area = string.IsNullOrWhiteSpace(areaName) ? string.Empty : areaName;