2017-01-13 2 views
0

Привет Я разрабатываю веб-проект api2. Я размещал приложение на сервере 192.168.0.213, и я пытаюсь получить доступ к методам, как показано ниже.Cors не работает в веб-проекте api2

this.getSubs = function() { 
     var url = 'http://192.168.0.213:7777/api/User_Creation/'; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 

Выше функции возвращают данные без проблем. Например, мои методы ниже с глаголами, такими как PUT, DELETE и POST, не работают.

this.saveSubscriber = function (sub) { 
     return $http({ 
      method: 'post', 
      data: JSON.stringify(sub), 
      url: 'http://192.168.0.213:7777/api/User_Creation/', 
      contentType: "application/json" 
     }); 
    } 

Я пробовал много способов, пока не работал ни один метод. В настоящее время у меня есть код ниже в файле web.config.

<customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
     <add name="Access-Control-Allow-Methods" value="POST,GET,PUT,DELETE" /> 
     </customHeaders> 

Также у меня есть строка под кодом в файле webapiconfig.cs.

private static void EnableCrossSiteRequests(HttpConfiguration config) 
     { 
      var cors = new EnableCorsAttribute(
       origins: "*", 
       headers: "*", 
       methods: "*"); 
      config.EnableCors(cors); 
     } 

Также у меня есть строка кода в контроллере. Все еще ничего не работает.

[EnableCors(origins: "http://192.168.0.213:7777", headers: "*", methods: "*")] 

Также я прокомментировал. Я пробовал все способы только GET глагол работает нормально. Мои операции удаления обновления вставки не работают. Могу я узнать, где я делаю что-то неправильно? Могу я получить некоторую помощь на этом, поскольку я старался изо всех сил, пока не везет. Спасибо всем.

+0

Это, вероятно, делает предполетный запрос. См. Https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api и http://www.asp.net/web-api/overview/ security/enable-cross-origin-requests-in-web-api # enable-cors У меня такая же проблема с MVC, я не уверен, в чем проблема. –

+0

Спасибо. Я становлюсь ниже ошибки. MLHttpRequest не может загрузить http://192.168.0.54:8099/api/User_Creation/41. Ответ на предполетный период имеет недопустимый код статуса HTTP 405 –

+0

Итак, я считаю, что есть глагол OPTION, который отправляется. Один из возможных способов заключается в том, чтобы не отправлять 'application/json' в качестве вашего типа, как http://stackoverflow.com/a/22968724/2953322 –

ответ

1

попробовать wigh что-то вроде этого сервера: (для меня работает отлично):

Startup.cs файл: (install Microsoft.Owin.Cors nuget packages before)

using Goocity.API; 
using Microsoft.Owin; 
using Microsoft.Owin.Cors; 
using Owin; 

[assembly: OwinStartup("API", typeof(Goocity.API.Startup))] 

namespace Goocity.API 
{ 
    public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      #region TO UNCOMMENT WHEN IS IN PRODUCTION 
      //var corsPolicy = new CorsPolicy 
      //{ 
      // AllowAnyMethod = true, 
      // AllowAnyHeader = true, 
      // SupportsCredentials = true, 
      // Origins = { "http://www.mysite.it" } 
      //}; 

      //app.UseCors(new CorsOptions 
      //{ 
      // PolicyProvider = new CorsPolicyProvider 
      // { 
      //  PolicyResolver = context => Task.FromResult(corsPolicy) 
      // } 
      //}); 
      #endregion TO UNCOMMENT WHEN IS IN PRODUCTION 

      app.UseCors(CorsOptions.AllowAll); 
      ConfigureAuth(app); 

     } 
    } 
} 

тогда ваш WebConfig: (в разделе system.webServer)

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 

     <add name="Access-Control-Allow-Credentials" value="true" /> 
     <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, X-Token, Cache-Control" /> 
     <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule" /> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    <staticContent> 
     <remove fileExtension=".woff" /> 
     <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> 
     <remove fileExtension=".woff2" /> 
     <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" /> 
     <remove fileExtension=".json" /> 
     <mimeMap fileExtension=".json" mimeType="application/json" /> 
    </staticContent> 
    <!--<rewrite> 
     <rules> 
     <rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
      <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
      </conditions> 
      <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 

     </rules> 
    </rewrite>--> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <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> 

    </system.webServer> 

Надеется, что это поможет вам !! ...

+0

спасибо. Я попробую сейчас ... –

1

Вы должны [EnableCors(origins: "http://192.168.0.54", headers: "*", methods: "*")] другими словами, ваши EnableCors должны указать клиент, который пытается подключиться, а не сам

+0

Спасибо .. по-прежнему не повезло. Такая же ошибка –

+0

Всякий раз, когда я делаю ниже, удаляйте запрос через почтальон http://192.168.0.213:7777/api/User_Creation/41 он отлично работает. Кажется странным. В postman ниже вещей, которые я вижу в Access-Control-Allow-Methods → POST, GET, PUT, DELETE Access-Control-Allow-Origin → * Могу ли я знать, что здесь не так? –

+0

Бегущий через Почтальон не имеет значения, поскольку он не связан с CORS. Вы не упомянули, включили ли вы CORS в 'Register()'. Взгляните сюда: https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api для получения более подробной информации и посмотреть, как ваш код отличается от ссылки осуществление – Felix

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