Angularjs und ASP.NET Web-Api Ursache 500 Internal Server Error auf $http.post
Ich bin mit Angularjs und ASP.NET Web-Api my $http.get, $http.put und $http.löschen funktioniert gut, aber wenn ich Anrufe, $http.post bekomme ich 500 Internal Server Error, hier ist mein code:
Meinem Angularjs Controller-Funktion einfügen:
$scope.insert = function () {
var data = '{ "Id": "1", "Name": "test", "Category": "r", "Price": "456.00" }';
$http.post('api/products', data).success(function (data) {
alert("it works");
}).error(function () {
console.log(Error);
alert('Error reading JSON file. - ' + data);
});
}
Mein Modell in C#:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
Mein controller in C#:
public class ProductsController : ApiController
{
public void PostProduct(Product product)
{
if (product == null)
{
throw new ArgumentNullException("product is NULL");
}
try
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd = new SqlCommand("INSERT INTO [AdventureWorks2012].[Production].[Product2] ( [Name], [ListPrice], [ProductLine]) VALUES ('" + product.Name + "', '" + product.Price + "', '" + product.Category + "')", con);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Code nie erreicht brake Punkte in C# - controller und wirft 500 Internal Server Error.
Bitte beraten.
- Bitte geben Sie die route-Konfiguration.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das, was du sagst, wahr ist und die Ausführung von code nie erreicht Ihre
PostProduct()
action-Methode in IhrerProductsController
, dann muss das problem entweder oben in der Web API pipeline (z.B. eine Globale message-Handler, Filter, etc.) oder mit dem Kunden.Es ist einfach zu beseitigen, die der client-code aus dem Prozess, indem er die gleiche Anfrage und Daten auf Ihrer Web-API mit Fiddler, Briefträger, etc. Ich weiß, es ist eine grundlegende Sache zu deuten, aber da Sie nicht klären, wenn Sie versucht, diesen Schritt oder nicht in der Frage, die ich hatte, es zu erwähnen.
Wenn der Antrag ordnungsgemäß funktioniert, wenn an so, dann ist es ein problem mit Ihrem client-code. Ansonsten müssen Sie werfen Sie einen Blick auf den code, der ausgeführt wird auf Ihrem server, bevor Sie Ihre Anfrage wird weitergeleitet an den controller an.
Dies ist wahrscheinlich ein routing-Problem. Erste Schritt ist, um herauszufinden, ob Ihre Routen sind richtig eingestellt. Verwenden Sie dieses tool zum Debuggen von Routen: http://www.nuget.org/packages/routedebugger
z.B. müssen Sie möglicherweise verwenden Sie das folgende url-api/Produkte/PostProduct je nach routing. Auch würde ich eine [HttpPost] - Attribut vor, dass die action-Methode.
Wenn das routing korrekt ist, dann könnte es einige Probleme mit Ihrem Modell und wie die Json übergeben wird, Ihre Aktion, damit der router cant match die richtige Aktion Methode. Ich empfehle Ihnen, verwenden Sie Fiddler, um zu inspizieren Http-Anfrage und-Antwort, und siehe, was ist die genaue Anforderung Körper.
UPDATE: Problem gelöst! Ich habe Briefträger Erweiterung zu meinem Chrome-browser als djikay vorgeschlagen hat und entdeckt, dass er sieht POST-Methoden in ProductsController und verwirrt, die man zu nennen.
Offenbar Controller sollte nur über GET -, POST -, PUT-und DELETE-Methoden, aber ich habe auch eine andere Methode, die ich rief, indem GetProduct und GetAllProducts, um Redundanz zu vermeiden. Aber es sieht andere Methoden Hinzugefügt, um den controller, nicht GET, POST, PUT oder DELETE werden als POST.
Ich glaube, ich war arbeiten mit WebForms zu lange und aktualisieren müssen, mein MVC-Kenntnisse.
In jedem Fall beide Antworten haben mir schon sehr geholfen bei der Suche nach der Lösung und ich danke Euch beiden djikay und Aidin.
[Http...]
- Attribut auf Ihre Methode und Ihre Methode Namen folgt nicht die Web-API naming convention, dann ist es alsPOST
(ich hatte eine ähnliche Frage).