2016-10-31 3 views
0

Я уже несколько дней борюсь с проблемой CORS, и я застрял. У меня есть угловое приложение, пытающееся сделать простую HTTP-запись данных Json.CORS предвключает WebAPI2, не возвращая правильные заголовки

Я пошел вниз по маршруту, описанному здесь: ASP.NET Web API - CORS Support in ASP.NET Web API 2 С пользовательской фабрике, и я поставил свою web.config в качестве:

<handlers> 
     <remove name="WebDAV"/> 
     <remove name="OPTIONSVerbHandler"/> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 

Мой $ HTTP POST вызов:

  var serviceEndpoint = "https://mybox/ourservices/myservices/1.0.0.1/api/process"; 

     var requestData ={'FirstName':'Nick','LastName':'Jacobs'}; 

     $http({ 
      method: "POST", 
      url: serviceEndpoint, 
      withCredentials: true, 
      data: requestData, 
      headers: { 
       'Content-Type': 'application/json', 
       'Accept':'application/json' 
      } 
     }) 
     .success(function (data, status, headers, config) { 
      // I need to pick off the user name from the JSON that's returned. 
      console.log(data); 
      deferred.resolve(data); 
     }) 
     .error(function (data, status) { 
      deferred.reject(data); 
     }); 

Дело в том, что я вижу запрос перед полетом на сервер, он передает мое происхождение и запрашивает соответствующие заголовки, но я не получаю ни одного из заголовков ответа CORS. Если я войду в web.config и добавлю разрешенные методы, я увижу, что вернусь, но поскольку я использую withCredentials, тогда я не могу использовать заголовок ответа на исходный исходный код, и я надеялся, что описанная фабрика в документе MSDN выше, я бы решил свою проблему.

Любые идеи, что мне не хватает?

Thanks eveyrbody!

+0

Трассировка показывает мне, что запрос даже не доходит до моего кода. Это делает его на моем сервере. (Весь полный IIS на Win10). –

ответ

0

Вам необходимо настроить CORS в приложении web api. Для CORS существует пакет nuget, в основном это атрибут в web-api-контроллере и одна строка конфигурации в веб-стиле api config, например config.EnableCors(). Не требуется какой-либо угловой конфигурации. ТКС

MenusItemController.cs

[RoutePrefix("api/menus")] 
[EnableCors(origins: "*", headers: "*", methods: "*")] 
public class MenuItemsController : ApiController 
{ 
    [Route("")] 
    public IHttpActionResult Post() 
    { 
     return Ok(new 
     { 
      Result = "post menus" 
     }); 
    } 

    [Route("")] 
    public IHttpActionResult Get() 
    { 
     return Ok(new 
     { 
      Result = "get menus" 
     }); 
    } 
} 

WebApiConfig.cs

public static void Register(HttpConfiguration config) 
{ 
     // Web API configuration and services 
     // Configure Web API to use only bearer token authentication. 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     config.EnableCors(); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
} 

NuGet Пакеты:

  • Microsoft.AspNet.We bApi.Cors
  • Microsoft.Owin.Cors
  • Microsoft.AspNet.Cors

я опубликовал мое приложение и работал отлично. Я не делал никаких конфигурационных или угловых параметров запроса. Попробуйте GET или POST здесь: http://www.blocodecodigo.com.br/api/menus.

+1

что-то большее, чем config.EnableCors() и атрибуты [EnableCors()]? Мы идем по маршруту в статье MSDN, чтобы мы могли иметь динамическое происхождение ..... –

Смежные вопросы