zu tun, wenn Ihre HTTP-Anforderung ist simplePhill's answer wird dann ausreichen, aber wenn die Anforderung nicht so einfach ist, wird der Browser eine Vorkontrolle senden. Die Preflight-Prüfung ist eine OPTIONS-HTTP-Anfrage und dies muss ebenfalls behandelt werden. Hier
ist eine Erweiterung Methode CORS zu konfigurieren:
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;
}
}
}
});
}
}
Damit CORS nennen diese Erweiterungsmethode in der Bootstrap-Programm:
protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.EnableCORS();
}
Bitte beachten Sie, es nicht NancyModule erweitert, weil OPTIONS is handled outside of module (auch here).
dies funktionierte für mich, aber nicht für den Post, :( –
Das ist wirklich seltsam. In dieser Zeile 'WithHeader (" Access-Control-Allow-Methoden "," POST, GET ")' Sie erlauben die Methoden, die Sie brauchen. – oaamados