WEB API:我显然无法启用 CORS(?)
Posted
技术标签:
【中文标题】WEB API:我显然无法启用 CORS(?)【英文标题】:WEB API : I apparently can't enable CORS ( ? ) 【发布时间】:2017-07-09 23:12:57 【问题描述】:Ahoy Coder 朋友。
在这个问题Angular 2 + web api 之后,我想到我可能必须为我的前端启用 CORS 才能访问我的后端 Web api。
但是,即使我尝试了这些步骤 http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/08/31/how-to-enable-cors-in-the-asp-net-web-api.aspx 以及这些 https://enable-cors.org/server_aspnet.html ,显然没有任何改变:当我尝试使用邮递员到达 http://localhost:58825/api/character 时,我收到了预期的字符列表,但没有 CORS答案中的标题(允许来源等)。 至于前端,您可能会在链接的问题中看到 Angular 甚至找不到 API。
这里是 web.config 的相关示例:
public static void Register(HttpConfiguration config)
// Web API configuration and services
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*");
config.EnableCors(cors);
还有控制器:
public class CharacterController : ApiController
private readonly CharacterRepository repo = new CharacterRepository();
javascriptSerializer jsonConverter = new JavaScriptSerializer();
[EnableCors(origins:"http://localhost:3000", headers:"*", methods:"*")]
// GET: api/Character
public IEnumerable<string> GetAll()
List<Character> myCharacs = repo.Get().ToList();
List<String> myJsonCharacs = new List<string>();
foreach (var charac in myCharacs)
var cur = jsonConverter.Serialize(charac);
myJsonCharacs.Add(cur);
return myJsonCharacs;
//return myCharacs;
显然,我添加了 nuget 包 Microsoft.AspNet.WebApi.Cors (5.2.2)。
我尝试清理解决方案、重建、重新启动 VS...我已经查看了此处在 SO 上提出的“类似问题”,但我什至没有“无标题”异常,我的请求似乎通过了没有给出关于 CORS 的 f*ck。
我的前端应用程序位于 localhost:3000,我的 api 位于 localhost:58225(我通过 Visual Studio 启动它,如果这有任何改变)
有人知道我在什么方面失败了吗? (生活除外,这不是问题,我已经习惯了)
编辑:Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3 的可能加倍
重新编辑:我不知道它是否是真正的 doublon,但我设法通过添加解决了我的问题
add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
verb="GET,HEAD,POST,PUT,DELETE"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" /
到我的 webconfig 文件,如原始帖子中所述,我现在在邮递员中看到了标题。
【问题讨论】:
【参考方案1】:当您需要启用 CORS 时,您可以转到 Startup.cs
文件并添加:
using Microsoft.Owin.Cors;
在开头。那么你有两个选择:
您指定来源:
var corsPolicy = new CorsPolicy AllowAnyHeader = true, AllowAnyMethod = true ;
corsPolicy.Origins.Add("your origin");
var corsOptions = new CorsOptions
PolicyProvider = new CorsPolicyProvider
PolicyResolver = context => Task.FromResult(corsPolicy)
;
您允许所有这些:
app.UseCors(CorsOptions.AllowAll);
这些都发生在Configuration
方法中。
【讨论】:
这是一个web api项目,没有startup.cs文件。 然后将其添加到在 API 运行之前执行代码的文件之一,应该可以工作。这样的文件是Global.asax
。此外,如果您使用Microsoft Identity
进行身份验证,则WebApi
项目中有一个Startup.cs
文件。
好吧,我不使用微软身份验证,问题表明我在WebApiConfig中做了类似的步骤。我不明白为什么在 webconfig 中添加标头可以解决问题并将它们添加到其他任何地方还不够:/以上是关于WEB API:我显然无法启用 CORS(?)的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure 上为 .NET Web Api 启用 CORS
为 Web API 1、.net 4.0 启用 CORS 中的问题