如何在ASP.NET Core API中排除动词?

时间:2017-10-05 11:53:56

标签: asp.net-core web-config asp.net-core-webapi httpverbs

我需要排除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

的位置

1 个答案:

答案 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);
        }

    }

使用上述中间件,您可以为任何405HttpDelete请求返回HttpPut的状态代码。