我需要排除允许使用API解决方案的动词,但是我找不到示例如何在web.config
中进行。
我确实找到了一个看起来像这样的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
?
在ASP.NET核心中,HTTP处理程序的实现和模块被中间件取代。本文有足够的信息如何从HTTP处理程序和模块迁移到ASP.NET核心中间件。https://learn.microsoft.com/en-us/aspnet/core/migration/http-modules
为了将HTTP动词排除在API之外,您可以编写一个简单的中间件:
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);
}
}
使用上述中间件,您将为任何HttpDelete
和HttpPut
请求返回405
的状态代码。