使用されているすべての動詞に対してローカルホストで正常に動作するコントローラーがありますが、IIS 7 で DELETE が失敗して 404 が返されます。Web サーバーには webdav がインストールされておらず、必死になって FTP もオフにしました :) 他にどこに行くべきかわかりません見る。
私のコントローラー:
[HttpDelete]
public HttpResponseMessage Delete()
{
oTrace T = new oTrace();
T.trace("deprovision request");
string headers = Request.Headers.Authorization.ToString().Split(' ')[1];
string userpwd = WebConfigurationManager.AppSettings["xxxxuserpwd"];
//try
//{
string basicData = System.Text.ASCIIEncoding.ASCII.GetString(System.Convert.FromBase64String(headers));
if (basicData != userpwd)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}
else
{
string[] paths = Request.RequestUri.ToString().Split('/');
Guid Unique = new Guid(paths[paths.Length - 1]);
//HttpContent requestContent = Request.Content;
//string jsonContent = requestContent.ReadAsStringAsync().Result;
//oProvision myProvision = JsonConvert.DeserializeObject<oProvision>(jsonContent);
//string JSONresponse = @"{""id"":""1"", ""config"": { ""xxON_UNIQUE"":""" + Convert.ToString(Unique) + @"""} }";
var response = this.Request.CreateResponse(HttpStatusCode.OK);
//response.Content = new StringContent(JSONresponse, Encoding.UTF8, "application/json");
////kick off GetAppInfoRequest
BackgroundWorker barInvoker = new BackgroundWorker();
barInvoker.DoWork += delegate
{
Thread.Sleep(TimeSpan.FromSeconds(10));
deProvisionAddon(Unique);
};
barInvoker.RunWorkerAsync();
return response;
}
}
私のweb.config
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
私のwebapi.config
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "heroku/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DeleteApi",
routeTemplate: "heroku/{controller}/Delete/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnableSystemDiagnosticsTracing();
}
私は何日もこれと戦ってきたので、感謝して受け取った助け。