Web API プロジェクトで、HTTP PUT
自分のリソースに対して実行できません。この問題に関するいくつかの 同様の 質問 を読み、推奨されるアドバイスに従いました。
まず、自分のマシン (Windows 7 64 ビット) で WebDAV を完全にアンインストールし、続いてマシンを再起動しました。
次に、WebDAV ハンドラーは myweb.config
で削除済みとして指定され、HTTP PUT
動詞は拡張なし URL ハンドラーで許可されるように指定されました。
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule"/>
</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-Integrated-4.0"
path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
resourceType="Unspecified"
requireAccess="Script"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</handlers>
ISAPI Extensionless URL Handler (32 ビットおよび 64 ビット) を追加して、アプリケーションを統合パイプライン アプリケーション プールから従来のアプリケーション プールに変更することさえ試みました。
<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" />
現在、クロス オリジン リソース共有 (CORS) のサポートを有効にするために、Thinktecture IdentityModelを使用しています。私の正気を保つために、すべてHTTP PUT
が実際に許可されていることを確認するためにすべてを有効にするという核オプションを使用しました。
config.RegisterGlobal(httpConfig);
config.ForAllResources()
.ForAllOrigins()
.AllowAllMethods()
.AllowAllRequestHeaders();
属性ルーティングNuGet パッケージは、現在のアセンブリと のサブタイプからすべてのルートを取得するように構成されていますApiController
。
config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
config.AddRoutesFromControllersOfType<ApiController>();
私のリソースにもPUT
適切に指定された属性があります。
[PUT("/API/Authenticate/Link/{key}/{identifier}")]
public Boolean LinkUser(Guid key, String identifier) { ... }
この問題について私が調べたすべてのリソースは、まったく同じことを推奨しています: WebDAV をアンインストールし、WebDAV ハンドラーを無効にし、Extensionless URL ハンドラーが適切に構成されていることを確認します。私はそれをすべてやりましたが、まだうまくいきません。
フィドラーでは、次のようになっています。
PUT https://localhost/Test/API/Authenticate/Link/Foo/Bar
{"Message":"The requested resource does not support http method 'PUT'."}
私は何を間違っていますか?