LÖSCHEN/SETZEN Sie die Verben Folge 404 not Found in WebAPI, nur wenn lokal ausgeführt
Ich weiß, das ist ein allgemein Problem angesprochen, und ich habe alles getan, dass viele Beiträge hier SO vorschlagen. Wenn ich versuche, einen Datensatz löschen mit WebAPI (version 2) von meinem MVC5 Frontend läuft unter dem lokalen IIS, bekomme ich eine 404 not Found Antwort. Hier sind die Dinge, die ich versucht habe:
Habe ich Folgendes unter <system.webServer />
in meinen WebAPI web.config:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Ich habe die Anweisungen befolgt: http://geekswithblogs.net/michelotti/archive/2011/05/28/resolve-404-in-iis-express-for-put-and-delete-verbs.aspx, die im Grunde sagen zu ändern Sie die ExtensionlessUrlHandler-Integrated-4.0
im IIS "Handlerzuordnungen". Es sagt zu Doppel-klicken Sie auf den handler, klicken Sie auf "Einschränkungen", und "Erlauben, PUT-und DELETE-Verben". Ich habe dies getan, und ich bekomme immer noch die Fehlermeldung 404.
Ich getan habe, ein IIS-reset.
Hier mein MVC5 Frontend-code zum aufrufen der WebAPI delete-Methode - bitte beachten Sie, dass, wenn ich manuell navigieren Sie zu api/bulletinboard/get/{0}
wo {0}
ist eine ganze Zahl, bekomme ich einen gültigen JSON
Antwort. Unten contactUri
ist http://localhost/SiteName/api/bulletinboard/get/53
die gibt gültige JSON
:
[HttpPost, ActionName("Delete")]
public ActionResult Delete(string appId, int id)
{
response = client.GetAsync(string.Format("api/bulletinboard/get/{0}", id)).Result;
contactUri = response.RequestMessage.RequestUri;
response = client.DeleteAsync(contactUri).Result;
if (response.IsSuccessStatusCode)
{
return RedirectToAction("MessageList", new { appId = appId });
}
else
{
LoggerHelper.GetLogger().InsertError(new Exception(string.Format(
"Cannot delete message due to HTTP Response Status Code not being successful: {0}", response.StatusCode)));
return View("Problem");
}
}
Hier mein WebAPI Methode löschen:
[HttpDelete]
public HttpResponseMessage Delete(int id)
{
BulletinBoard bulletinBoard = db.BulletinBoards.Find(id);
if (bulletinBoard == null)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
db.BulletinBoards.Remove(bulletinBoard);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
return Request.CreateResponse(HttpStatusCode.OK, bulletinBoard);
}
Hier mein WebApiConfig.cs in meinen WebAPI-Projekt:
public static void Register(HttpConfiguration config)
{
//Web API configuration and services
config.EnableCors();
//Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ApiWithActionName",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.Add(new PlainTextFormatter());
}
FRAGE: Was kann ich sonst noch versuchen, um diesen Fehler zu beheben? Dies funktioniert gut, wenn Sie eingesetzt werden von meiner lokalen Umgebung auf meinem Entwicklungs-Server.
api/bulletinboard/get/{0}
in der Erwägung, dass Sie versuchen zu erreichen, die Aktion löschen...sollte es nicht api/bulletinboard/delete/{0}
?Nein, es sollte, wie ich es habe. Die
DeleteAsync
wird das Ergebnis der GET-Anforderung und löscht es. Ich habe diese arbeiten, wie in einem anderen Projekt. Jedoch habe ich es zu ändern, was Sie sagten, nur um zu sehen, was passieren würde, und ich hatte das gleiche 404-Fehler. Ich denke es ist etwas über das LÖSCHEN verlangen, dass der IIS nicht mag...Ah, es ist eine sehr seltsame situation... werfen Sie einen Blick auf meine Antwort unten.
InformationsquelleAutor Mike Marks | 2014-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
für diejenigen, die noch auf der Suche nach aktivieren von LÖSCHEN & SETZEN Sie Den code unten mein problem lösen
InformationsquelleAutor nabukhas
Wir zu kämpfen hatten, mit LÖSCHEN/SETZEN der Rückkehr 404 Fehler in IIS 8. Wir haben alle der oben genannten Antworten könnenden web.config akzeptieren alle Verben, aktivieren setzen/löschen in die Anforderung-Filterung. Wir hatten auch deaktiviert webDAV mehrere Möglichkeiten. Wir haben festgestellt, dass der Anwendungspool wurde in der klassischen Verse integriert (was es sein sollte). Nun LÖSCHEN/SETZEN Sie die Verben funktionieren.
InformationsquelleAutor Mark Jensen
Wenn Sie IIS verwenden, stellen Sie sicher, dass die HTTP-Verben legen zu dürfen in der Anfrage Filtern. Wenn Ihr es nicht haben, können Sie es, um es zu ermöglichen, auf der Seite.
InformationsquelleAutor Kalel Wade
Was ich Tat, war einfach wechseln mit Hilfe von lokalen IIS auf IIS Express über die Projekt-Eigenschaften auf meine WebAPI-Projekt, dieses Problem zu umgehen. Dies zu tun und löschen eines Datensatzes dann ergab 405 Methode Nicht Erlaubt-Fehler. Ich wechselte dann in den code-Zeilen:
:
Dies ist sehr seltsam, weil ich habe ein anderes Projekt, läuft der erste block von code, und es löscht die Datensätze einwandfrei. Sowieso, das gelöst mein lokales problem. Ich verstehe das nicht wirklich lösen, mein Hauptproblem war die Verwendung lokaler IIS, aber diese Problemumgehung ist für mich gearbeitet.
InformationsquelleAutor Mike Marks
Wenn Ihr Projekt arbeiten unter IIS und nicht unter IISExpress, versuchen Sie, IISExpress Pipeline-Managed-Modus Integriert.
SETZEN und LÖSCHEN von Verben zu haben scheint problem in der Klassischen Pipeline-Managed-Modus.
Glück..
Roberto.
InformationsquelleAutor Roberto Giardi
Mark Jensen Lösung für mich gearbeitet.
Gerade geändert meine Anwendung einen Pool von "Classic" bis "Integriert" und meine Wünsche gearbeitet.
InformationsquelleAutor Marco Carvalho
Dieses Problem kann behoben werden, indem IIS-Ebene-Konfiguration-
Öffnen Sie den IIS->wählen Sie Ihre website->IIS (Abschnitt) ->Request Filtering ->HTTP-Verben
Entfernen LÖSCHEN verb/ODER zulassen, LÖSCHEN verb
Problem aufgelöst wird.
InformationsquelleAutor Yoggesh Paatil