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