asp.net - deploy - how to set up asp net website in iis




ASP.NET-Web-API-PUT & DELETE Verben nicht zulässig-IIS 8 (12)

Ändern Sie Ihre Web.Config-Datei wie folgt. Es wird wie Charme wirken.

<system.webServer> im Knoten <system.webServer> folgenden Teil des Codes hinzu

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Nach dem Hinzufügen sieht Ihre Web.Config wie folgt aus

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <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>

Ich habe kürzlich von Visual Studio 2010 auf Visual Studio 2012 RC umgestellt. Das Installationsprogramm installiert auch IIS 8 Express, das Visual Studio jetzt als Standardwebserver verwendet.

IIS 8 blockiert meine WEB-API-Anforderungen, die PUT- und DELETE-Verben verwenden. IIS gibt einen 405-Fehler zurück The requested resource does not support http method 'PUT' .

Ich weiß, dass Leute in der Vergangenheit Probleme damit haben und es gibt mehrere Nachrichten darüber auf Stack Overflow. Bei IIS 7 Express bestand die Lösung darin, WebDav zu deinstallieren. Leider sehe ich keine Möglichkeit, dies mit IIS 8 zu tun.

Ich habe versucht, die WebDav-Abschnitte aus applicationhost.config zu bearbeiten, aber das hat nicht geholfen. Zum Beispiel habe ich <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> aus der Konfigurationsdatei entfernt.

Ich habe viel zu lange damit verbracht. Es muss einen einfachen Weg geben, PUT und DELETE zu aktivieren?


Aktivieren Sie CORS (nett und ordentlich)

1. Fügen Sie CORS nugget-Paket hinzu

Install-Package microsoft.aspnet.webapi.cors

2. Fügen Sie in der Datei WebApiConfig.cs der Methode registrieren den folgenden Code hinzu:

config.EnableCors();

Ex:
Verwenden von System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3. Fügen Sie den folgenden Code in den Namespace des Controllers ein: get, post, delete, put oder eine beliebige HTTP-Methode

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

Ex:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

Referenz: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api


Der andere Grund kann der folgende sein:
Ich habe meine Url für Web API-Methode entsprechend dieser Antwort geändert:

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Aber diese Methode erzeugt Links wie:

/api/MyApiCtrl?action=MyAction

Dies funktioniert ordnungsgemäß mit GET und POST-Anfragen, aber nicht mit PUT oder DELETE.
Also habe ich es einfach ersetzt mit:

/api/MyApiCtrl

und es hat das Problem behoben.


Dies funktionierte für mich zusammen mit einigen anderen Antworten auf iis8. Mein Fehler war speziell 404.6

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

Für PHP war es einfach:

  1. Öffnen Sie IIS
  2. Gehe zu Handler Mappings
  3. Klicken Sie auf Bearbeiten auf php5.6.x oder php7.0.x
  4. Klicken Sie auf "Beschränkungen anfordern"
  5. Wählen Sie unter der Registerkarte Verben "eines der folgenden Verben" und fügen Sie "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS" hinzu

Ich kann mir vorstellen, dass dies auch mit anderen Handlern funktioniert.


Hier sehen Sie, wie Sie zusätzliche HTTP-Verben mit der IIS-Manager-GUI zulassen.

  1. Wählen Sie im IIS-Manager die Site aus, für die Sie PUT oder DELETE zulassen möchten.

  2. Klicken Sie auf die Option "Filter anfordern". Klicken Sie auf die Registerkarte "HTTP-Verben".

  3. Klicken Sie auf den Link "Verb zulassen ..." in der Seitenleiste.

  4. Klicken Sie in dem Feld, das angezeigt wird, auf "DELETE", klicken Sie auf OK.

  5. Klicken Sie erneut auf den Link "Verb zulassen ..." in der Seitenleiste.

  6. Klicken Sie in dem Feld, das angezeigt wird, auf "PUT", klicken Sie auf OK.


In Asp.Net Web API - webconfig. Dies funktioniert in allen Browsern.

Fügen Sie den folgenden Code in dem System.web-Tag hinzu

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Ersetzen Sie Ihr system.webserver-Tag mit diesem untenstehenden Code

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <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" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


In IIS 8.5 / Windows 2012R2 funktionierte nichts, das hier erwähnt wurde, für mich. Ich weiß nicht, was mit dem Entfernen von WebDAV gemeint ist, aber das hat das Problem für mich nicht gelöst.

Was mir geholfen hat, sind die folgenden Schritte;

  1. Ich bin zum IIS-Manager gegangen.
  2. Im linken Bereich wurde die Site ausgewählt.
  3. Wählen Sie im linken Arbeitsbereich das WebDAV, Doppelklick geöffnet.
  4. Im rechten Bereich deaktiviere es.

Jetzt funktioniert alles.


Nachdem nichts funktioniert hat, konnte ich das durch folgende Schritte lösen:

• Bei der Installation von IIS wurden die IIS-Einstellungen von "WEB DAV PUBLISHING" nicht ausgewählt. • INETMGR - Standardwebsite - Anforderungsfilterung - HTTP-Verben - PUT als True


Nur ein kurzes Update für alle anderen, die auf dieses Problem stoßen könnten. Ab heute funktioniert das Ändern des% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NICHT mehr (das funktionierte bisher einwandfrei, nicht sicher, ob dies auf ein Windows-Update zurückzuführen ist). Nach stundenlanger Frustration habe ich die web.config geändert, um diese Handler zu system.webserver hinzuzufügen, damit sie funktioniert:

<handlers>
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

        <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>

Prüfen Sie neben allen oben genannten Lösungen, ob die ID oder ein benutzerdefinierter Parameter in der DELETE-Methode mit der Routenkonfiguration übereinstimmt.

public void Delete(int id)
{
 //some code here
}

Wenn Sie mit wiederholten 405-Fehlern schlagen, setzen Sie die Methodensignatur wie oben beschrieben auf default zurück und versuchen Sie es.

Die Routenkonfiguration sucht standardmäßig nach der ID in der URL. Daher ist die Parametername- ID hier wichtig, es sei denn, Sie ändern die Routenkonfiguration im App_Start- Ordner.

Sie können jedoch den Datentyp der ID ändern.

Zum Beispiel sollte die folgende Methode gut funktionieren:

public void Delete(string id)
{
 //some code here
}

Hinweis: Stellen Sie außerdem sicher, dass Sie die Daten über die URL übergeben und nicht die Datenmethode, die die Payload als Body-Inhalt enthält.

DELETE http://{url}/{action}/{id}

Beispiel:

DELETE http://localhost/item/1

Ich hoffe es hilft.


Sie können Ihre Delete-Methode als POST als konvertieren;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }




iis-8