我需要排除API解决方案允许的动词,但我找不到如何在web.config
中执行此操作的示例。
我确实发现an example for MVC看起来像这样:
<configuration>
<system.web>
<httpHandlers>
<remove verb="*" path="MyPage.aspx" type="MyHandler, MyAssembly"/>
<add verb="*" path="MyPage.aspx" type="MySpecialHandler, MyAssembly"/>
</httpHandlers>
</system.web>
</configuration>
我也应该如何为API做这件事?
如果是这样,我应该把它放在path
?
答案 0 :(得分:2)
在ASP.NET Core中,HTTP处理程序和模块的实现被Middleware取代。本文提供了有关如何从HTTP处理程序和模块迁移到ASP.NET Core中间件的足够信息。 https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules
为了从您的API中排除HTTP动词,您可以编写一个这样的简单中间件:
public class VerbsMiddleware{
private readonly RequestDelegate _next;
private string[] VerbsToExclude = {"DELETE", "PUT"}; //You can put these in appsettings.json
public VerbsMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context){
if (VerbsToExclude.Contains(context.Request.Method))
{
context.Response.StatusCode = 405;
await context.Response.WriteAsync("Method Not Allowed");
}
await _next.Invoke(context);
}
}
使用上述中间件,您可以为任何405
和HttpDelete
请求返回HttpPut
的状态代码。