WEB API:我显然无法启用CORS(?)

时间:2017-02-20 15:34:47

标签: cors asp.net-web-api2

Ahoy Coder朋友。

在这个问题Angular 2 + web api之后,我想到了我可能必须为我的前端启用CORS才能到达我的后端网络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标题(allow-origin等)。 至于前端,您可能会在链接的问题中看到角度甚至找不到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 ......我已经看过&#34;类似问题&#34;在这里询问,但我甚至没有#34;没有标题&#34;例外,我的请求似乎没有给出关于CORS的f * ck。

我的前端应用程序位于localhost:3000,我的api位于localhost:58225(我通过visual studio启动它,如果这改变了什么)

有谁知道我惨遭失败的是什么? (除了生活,这不是问题,我已经习惯了)

编辑:可能加倍Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3

重新编辑:我不知道这是不是真的倍增,但我设法通过添加来解决我的问题

add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."  
verb="GET,HEAD,POST,PUT,DELETE"     
type="System.Web.Handlers.TransferRequestHandler"     
preCondition="integratedMode,runtimeVersionv4.0" /

到我的webconfig文件,如原帖中所述,现在我看到postman中的标题。

1 个答案:

答案 0 :(得分:1)

当您需要启用CORS时,您可以转到Startup.cs文件并添加:

using Microsoft.Owin.Cors;

一开始。那你有两个选择:

  1. 您指定了来源:

    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)
                            }
                        };
    
  2. 您允许所有这些:

    app.UseCors(CorsOptions.AllowAll);
    
  3. 每个都发生在Configuration方法中。