Ajax(Common Put、Delete)リクエストの解決、405(メソッドは許可されていません)
Resolve Ajax Common Put
今日、プロジェクトでput / deleteリクエストを使用したときに、次のエラーが見つかりました。
失敗の解決策:
インターネット上で多くのソリューションをチェックしても、追加などの効果はありません。
Web.configのwebServiceノードの下に追加するソリューションも多数あり、最終的に失敗します(ps:私のクロスドメイン構成は疑わしいものではありません)
見つかった問題:
多くの実験の結果、リクエストの最初のリクエストは、以下に示すようにOPTIONS(リクエストメソッド:OPTIONS)であることがわかりました。
PUTリクエストは送信されますか?OPTIONSリクエストのメソッドはどのようになっていますか? OPTIONSリクエストとは何ですか?インターネットで情報を確認して、ようやくわかりました。
- プリフライトリクエスト、PTIONSは、サーバーが実際のリクエストを許可するかどうかを尋ねる、ブラウザが開始する「プリフライト」リクエストです。
- Preflighted Requestsは、CORSの透過的なサーバー認証メカニズムです。プリフライトリクエストは、実際に送信されたリクエストが安全かどうかを判断するために、最初にHTTPOPTIONSリクエストヘッダーを別のドメイン名のリソースに送信する必要があります。
OPTIONSがプリフライトリクエストであることを知っている場合、ブラウザはどのような条件下でOPTIONSリクエストをトリガーしますか?
1.次のHTTPメソッドのいずれかを使用します。
–プット
–削除
–接続
–オプション
- 痕跡
–パッチ
2.CORSセキュリティヘッダーフィールドセット以外のヘッダーフィールドを人為的に設定します。コレクションは次のとおりです。
–受け入れる
–受け入れる-言語
–コンテンツ言語
–コンテンツタイプ(ただし、以下の追加要件に注意してください)
-DPR
–ダウンリンク
–データの保存
–ビューポート-幅
–幅
3. Content-Typeの値は、次のいずれにも属していません。
– application / x-www-form-urlencoded
– multipart / form-data
–テキスト/プレーン
次に、最初の条件であるputリクエストが使用されました。
最終的解決:
現在のプロジェクトでは、複雑すぎることを考慮する必要はなく、単純な処理はOPTIONS要求を解放することです。 (タイムラッシュのため、ここでは簡単な解決策のみが提供されています。自分で情報を確認できます)
通常のフィルターでは、メソッドは最初にリクエストを通じて取得され、次にOPTIONSがリリースされます。
.netMvc処理の例をここに書いてください。Global.asax次の処理を追加します。
protected void Application_BeginRequest() { if (Request.Headers.AllKeys.Contains('Origin') && Request.HttpMethod == 'OPTIONS') { Response.End() } }
最後にこの記事に感謝します: https://www.aliyun.com/jiaocheng/992452.html そして、tuyブロガー http://www.xudihui.com/