2017-02-20 44 views
1

Ahoy Coder的朋友。WEB API:我顯然不能啓用CORS(?)

在這個問題之後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頭(允許來源等等)的答案。 至於前端,您可能會在鏈接問題中看到角度甚至找不到該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 0.2)。

我試着清理解決方案,重建,重新啓動VS ...我已經看過在這裏問的「類似問題」,但我甚至沒有「無標題」異常,我的請求似乎沒有提供關於CORS的af * ck。

我的前端應用程序是在本地主機:3000,我的API是在localhost:58225(我通過Visual Studio中啓動它,如果這個改變任何東西)

有誰知道我在慘敗失敗? (除了生活,那不是,我已經習慣了有問題)

編輯:Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3

重新編輯的可能doublon:我不知道這是否是一個真正的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; 

開頭。然後,你有兩個選擇:

  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); 
    

每一種發生在Configuration方法。

+0

這是一個web api項目,沒有startup.cs文件。 – DoctorPrisme

+0

然後將其添加到您的API運行之前執行代碼的其中一個文件應該可以工作。這樣的文件是'Global.asax'。此外,如果您使用「Microsoft Identity」進行身份驗證,則在「WebApi」項目中有一個'Startup.cs'文件。 – StefanL19

+0

那麼,我不使用微軟認證,並說問題我在WebApiConfig做了類似的步驟。 我不明白爲什麼在webconfig中添加頭文件的技巧,並在其他地方添加它們是不夠的:/ – DoctorPrisme