2017-02-20 17 views
1

Друзья пользователя Ahoy Coder.WEB API: Я, видимо, не могу включить CORS (?)

После этого вопроса Angular 2 + web api мне пришло в голову, что мне, возможно, придется включить CORS для моего интерфейса, чтобы добраться до моего back-end 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 (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; 
    } 

Очевидно, я добавил Microsoft.AspNet.WebApi.Cors NuGet пакета (5.2 0,2).

Я пробовал очистить решение, перестроить, перезапустить VS ... Я смотрю на вопрос «similars question», заданный здесь на SO, но у меня даже нет исключения «без заголовков», мои запросы, похоже, пройти, не давая af * ck о CORS.

Мой передний конец приложение на локальном хосте: 3000, мой апи на локальном хосте: 58225 (я начинаю его с помощью Visual Studio, если это меняет что-нибудь)

Кто-нибудь знает, что я несчастно неудачу в? (Кроме жизни, это не проблема, я привык к нему)

Edit: возможно doublon из Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3

Re-Edit: я не знаю, если это правда 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

Это веб-проект api, нет файла startup.cs. – DoctorPrisme

+0

Затем, добавив его в один из файлов, где выполняется код перед запуском вашего API, он должен работать. Такой файл - «Global.asax». Кроме того, в проекте 'WebApi' имеется файл' Startup.cs', если вы используете 'Microsoft Identity' для аутентификации. – StefanL19

+0

Ну, я не использую аутентификацию microsoft, и на вопрос было указано, что я сделал аналогичные шаги в WebApiConfig. Я не понимаю, почему добавление заголовков в webconfig делало трюк и добавления их в другое место было недостаточно: / – DoctorPrisme