2017-11-04 6 views
0

GETが正常に動作します。 POSTメソッドを使用したChromeの場合: リソースの読み込みに失敗しました:サーバーが405(Method Not Allowed)のステータスで応答しました。 ロードに失敗しましたhttp://localhost:49834/api/Rest/:プリフライトの応答に無効なHTTPステータスコード405があります。 InterntExplorerにあります:SCRIPT7002:XMLHttpRequest:ネットワークエラー0x80070005、アクセスが拒否されました。Web ApiサービスPOSTのHTTPステータスコード405

コントローラー:

[EnableCors("*", "*", "*")] 
    public class RestController : ApiController 
    { 
// POST: api/Rest 
     [HttpPost] 
     public void Post([FromBody]Request Request) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Requests.Add(Request); 
       db.SaveChanges(); 
      } 
     } 
} 

WebApiConfig.cs

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
      var json = config.Formatters.JsonFormatter; 
      json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 
      config.Formatters.Remove(config.Formatters.XmlFormatter); 

のWeb.config:

<httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
    </customHeaders> 
    </httpProtocol> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule"/> <!-- add this --> 
    </modules> 
    <handlers>  
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="WebDAV" /> 
     <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> 
</system.webServer> 

AJAX POST:

var url = "http://localhost:49834/"; 
$.ajax({ 
       type: "POST", 
       url: url + "api/Rest/", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       data: JSON.stringify(submitData), 
       success: function (data) { 
       }, 
       error: function (err) { 
        console.log(err); 
        alert(err.status + " - " + err.statusText); 
       } 
      }) 

私はIIS Expressを使用しています:%userprofile%\ documents \ IISExpress \ configフォルダ内のapplicationHost.configファイルExtensionlessUrl-Integrated-4.0ハンドラはこの動詞= "GET、HEAD、POST、DEBUG、PUT、DELETEのように設定されています"

GETは、正常に動作します:

$.getJSON(url + "api/Rest").done(function (data) { 
        var mass = new Array();     
        $(data).each(function (index, e) { 
         ReqArray.push(e); 
        }) 
        vm.requests(ReqArray); 
       }); 

答えて

0

あり、私のAJAXといくつかの問題があった。このように、それは良い作品:

var url = "http://localhost:49834/"; 
    $.ajax({ 
         type: "POST", 
         url: url + "api/Rest", 
         dataType: "json", 
         data: submitData, 
         success: function (data) { 
         }, 
         error: function (err) { 
          console.log(err); 
          alert(err.status + " - " + err.statusText); 
         } 
        }) 
+0

あなたがエラーを自分で指摘したことを良いことだが、それはなぜこれを知ることも同様に重要です働いています - あなたが作成した 'API'は 'HTTP'動詞を 'POST'と呼びますそれ以外の場合は405(Method Not allowed)を返します。デフォルトでは、 'getJSON'メソッドは 'GET' 'HTTP'動詞でリクエストを送信し、明示的に 'ajax'メソッドで動詞を渡すことで問題が解決されました。 乾杯! –

関連する問題