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



我需要排除允许使用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);
        }
    }

使用上述中间件,您将为任何HttpDeleteHttpPut请求返回405的状态代码。

相关内容

  • 没有找到相关文章

最新更新