WebAPI:我显然可以';不能启用CORS(?)

WebAPI:我显然可以';不能启用CORS(?),cors,asp.net-web-api2,Cors,Asp.net Web Api2,嗨,编码员朋友们 在这个问题之后,我想到我可能必须为我的前端启用CORS来访问我的后端web api 然而,即使我尝试了这些步骤,显然没有任何改变:当我尝试与邮递员联系时,我收到了预期的字符列表,但答案中没有CORS标题(允许来源等)。 至于前端,您可能会在链接的问题中看到angular甚至找不到API 以下是web.config的相关示例: public static void Register(HttpConfiguration config) { // Web AP

嗨,编码员朋友们

在这个问题之后,我想到我可能必须为我的前端启用CORS来访问我的后端web api

然而,即使我尝试了这些步骤,显然没有任何改变:当我尝试与邮递员联系时,我收到了预期的字符列表,但答案中没有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;
    }

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

当需要启用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);
    

  • 每种情况都发生在
    配置
    方法中。

    这是一个web api项目,没有startup.cs文件。然后将其添加到api运行前执行代码的一个文件中,应该可以工作。这样的文件是
    Global.asax
    。此外,如果使用
    Microsoft Identity
    进行身份验证,则
    WebApi
    项目中有一个
    Startup.cs
    文件。我不使用Microsoft身份验证,问题是我在WebApiConfig中执行了类似的步骤。我不明白为什么在webconfig中添加标题会奏效,而在其他地方添加标题是不够的:/
    app.UseCors(CorsOptions.AllowAll);