我有一个使用NancyFX创建的API服务,以及一些前端开发人员针对此API创建SPA JS客户端.
我们希望针对已发布的服务器测试客户端代码,而无需以过多的频率发布客户端代码.
但是,客户端在localhost运行,服务器在Windows Azure.
在NancyFX服务器上启用CORS是否可行且容易?我怎样才能做到这一点?
谢谢.
oaa*_*dos 31
它可以在Nancy的bootstraper中做到这一点
protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
//CORS Enable
pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) =>
{
ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
.WithHeader("Access-Control-Allow-Methods", "POST,GET")
.WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type");
});
Run Code Online (Sandbox Code Playgroud)
Phi*_*ill 27
如果您使用IIS来托管Nancy,在本例中是在Windows Azure上,那么您只需更新web.config即可为每个请求添加标头.
这可以通过添加以下内容来完成:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
或者你可以做Sunny所建议的,如果你不喜欢每次都可以添加自己的扩展方法那么写:
public static class NancyExtensions
{
public static void EnableCors(this NancyModule module)
{
module.After.AddItemToEndOfPipeline(x =>
{
x.Response.WithHeader("Access-Control-Allow-Origin", "*");
});
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话this.EnableCors()到你的路线.
End*_*ono 14
如果您的HTTP请求很简单,那么Phill的答案就足够了,但如果请求不那么简单,浏览器将发送预检检查.预检检查是OPTIONS HTTP请求,也必须处理.
以下是配置CORS的扩展方法:
public static class MyNancyExtension
{
public static void EnableCORS(this Nancy.Bootstrapper.IPipelines pipelines)
{
pipelines.AfterRequest.AddItemToEndOfPipeline(ctx =>
{
if (ctx.Request.Headers.Keys.Contains("Origin"))
{
var origins = "" + string.Join(" ", ctx.Request.Headers["Origin"]);
ctx.Response.Headers["Access-Control-Allow-Origin"] = origins;
if (ctx.Request.Method == "OPTIONS")
{
// handle CORS preflight request
ctx.Response.Headers["Access-Control-Allow-Methods"] =
"GET, POST, PUT, DELETE, OPTIONS";
if (ctx.Request.Headers.Keys.Contains("Access-Control-Request-Headers"))
{
var allowedHeaders = "" + string.Join(
", ", ctx.Request.Headers["Access-Control-Request-Headers"]);
ctx.Response.Headers["Access-Control-Allow-Headers"] = allowedHeaders;
}
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
要启用CORS,请在引导程序中调用此扩展方法:
protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.EnableCORS();
}
Run Code Online (Sandbox Code Playgroud)
请注意,它不会扩展NancyModule,因为OPTIONS是在模块外部处理的(也在这里).
| 归档时间: |
|
| 查看次数: |
10265 次 |
| 最近记录: |