我想接受角网站的选项请求。每个端点(注册,登录等)都需要接受选项http动词。
然后我将以下内容添加到响应标头中。
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();
这将是大量的样板代码。
有没有办法可以使用通配符路由拦截任何选项请求,以便我的所有端点都可以接受选项请求?
答案 0 :(得分:3)
Nancy有OPTIONS
个请求的隐式路由,即尚未定义用户定义的OPTIONS
路由。请参阅OptionsRoute
以供参考。
如果您想要OPTIONS
次请求的自定义行为,您可以选择添加AfterRequest
挂钩:
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");
}
}
}
但我不确定为什么你只会在OPTIONS
个回复中添加CORS标头?
答案 1 :(得分:0)
所以,如果您需要所有标题,您可以在nancy bootstraper中添加ApplicationStartup方法,如下所示。默认的nancy行为将类似于任何选项请求的通配符路由,并将这些标头添加到响应中。
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
pipelines.AfterRequest += 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");
};
}