如何在 ASP.NET Web API SelfHost 应用程序中使用 CORS?

Posted

技术标签:

【中文标题】如何在 ASP.NET Web API SelfHost 应用程序中使用 CORS?【英文标题】:How to use CORS in ASP.NET Web API SelfHost applications? 【发布时间】:2013-06-20 23:37:06 【问题描述】:

我正在尝试将 ASP.NET Web API Selfhosted 应用程序与 CORS 一起使用,但出现错误:

XMLHttpRequest 无法加载 http://localhost:5555/api/product。 Access-Control-Allow-Origin 不允许 Origin null。

我该如何处理?

【问题讨论】:

【参考方案1】:

您也可以通过从Nuget 安装Microsoft.AspNet.WebApi.Cors 包来做到这一点。

这将允许您的 API 启用 Cross-Origin Resource Sharing (CORS)。你可以这样做:

 var config = new HttpSelfHostConfiguration(_baseAddress);
 config.EnableCors(new EnableCorsAttribute("*", headers: "*", methods: "*"));

【讨论】:

【参考方案2】:

WebAPIContrib 项目有一个简单的 Cors MessageHandler。或者,如果您正在寻找更复杂的解决方案,Thinktecture.IdentityModel 项目支持 CORS。

【讨论】:

@SeyedMortezaMousavi 现在 Web API 也支持 CORS。【参考方案3】:

添加类

public class CustomHeaderHandler : DelegatingHandler

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    
    return base.SendAsync(request, cancellationToken)
        .ContinueWith((task) =>
        
            HttpResponseMessage response = task.Result;
            response.Headers.Add("Access-Control-Allow-Origin", "*");
            return response;
        );
    

并在配置中注册

var config = new HttpSelfHostConfiguration("http://localhost:5555");    
config.MessageHandlers.Add(new CustomHeaderHandler());

【讨论】:

@Nerve 不适合我,我仍然得到,“XMLHttpRequest 无法加载 localhost:1125/api/Home/Data/somestring 请求的资源上不存在'Access-Control-Allow-Origin'标头。来源' localhost:1025' 因此不允许访问。"

以上是关于如何在 ASP.NET Web API SelfHost 应用程序中使用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?

如何使用 HTTP 连接通过托管在 IIS 上的 ASP.NET 成员身份保护 ASP.NET Web API [重复]

ASP.NET 的 web api - 如何构建对象流

如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?

如何在 Asp.Net WebForm 中调用 Web API?