3

使用されているすべての動詞に対してローカルホストで正常に動作するコントローラーがありますが、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();
    }

私は何日もこれと戦ってきたので、感謝して受け取った助け。

4

2 に答える 2

0

routeTemplate に「Delete」を含むルートは必要ありません。WebApi は、使用する HTTP 動詞に基づいて呼び出すアクションを認識します。したがって、HTTP DELETE リクエスト作成し、コントローラー アクションの名前が「Delete」である場合、慣例により、それを呼び出すことが認識されます。MVC コントローラーの場合のように名前で指定する必要はありません。

于 2013-11-07T21:36:16.357 に答える
-4

[HttpDelete] を使用してメソッドを定義する場合は、post または get と同様に、delete call webapi を使用する必要があります。

于 2014-01-04T03:50:49.650 に答える