c# - 实现选项 HttpVerb

标签 c# .net nancy

我想接受来自 Angular 网站的选项请求。每个端点(注册、登录等)都需要接受选项 http 动词。

然后我会将以下内容添加到响应 header 中。

   After += ctx =>
                    {
                        ctx.Response.WithHeader("Access-Control-Allow-Origin", "*");
                        ctx.Response.WithHeader("Access-Control-Allow-Headers", "accept, client-token, content-type");
                        ctx.Response.WithHeader("Access-Control-Allow-Methods", "POST, GET");
                        ctx.Response.WithHeader("Access-Control-Max-Age", "30758400");
     };

我不想做的是为每个端点添加额外的路由,例如

    Post[path + "Login"] = x => Login();
    Options[path + "Login"] = x => Login();

这将是大量样板代码。

有没有办法可以使用通配符路由拦截任何选项请求,以便我的所有端点都可以接受选项请求?

最佳答案

Nancy 对于 OPTIONS 请求有隐式路由,即用户定义的 OPTIONS 路由尚未定义。请参阅OptionsRoute供引用。

如果您希望为 OPTIONS 请求自定义行为,您也可以添加 AfterRequest Hook :

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
    pipelines.AfterRequest += ctx =>
    {
        // This will always be called at the end of the request
        if (ctx.Request.Method.Equals("OPTIONS", StringComparison.Ordinal))
        {
            ctx.Response.WithHeader("Access-Control-Allow-Origin", "*");
            ctx.Response.WithHeader("Access-Control-Allow-Headers", "accept, client-token, content-type");
            ctx.Response.WithHeader("Access-Control-Allow-Methods", "POST, GET");
            ctx.Response.WithHeader("Access-Control-Max-Age", "30758400");
        }
    }
}

但我不太确定为什么您只将 CORS header 添加到 OPTIONS 响应中?

关于c# - 实现选项 HttpVerb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068456/

相关文章:

c# - 如何处理 http 500 错误?

c# - 用于检查数据库中是否存在实体的 FluentValidator 扩展方法

c# - 如何创建包含真实图像的字节数组?

c# - Entity Framework - 生成额外 JOIN 的导航属性

c# - Fluent Validation 未在用于本地化的 ResourceManager 类上找到属性

c# - 南希模型绑定(bind)

c# - 如何获得可为空的字符串值?

c# - 货币转换器 Web 服务

c# - 没有管理权限的本地主机上的自托管 REST API

c# - 在仅包含值类型的自定义结构上使用 Marshal.SizeOf() 方法