HTML クライアントから API を呼び出そうとしています。内部サーバーエラーが表示されますが、郵便配達員で試してみると機能します。
これが私の API のコードです。
[AcceptVerbs("POST")]
public dynamic Add(string post,string title, string user)
{
if (post == null)
throw new Exception("Post content not added");
if (title == null)
throw new Exception("Post title not added");
var u = UserManager.FindByEmailAsync(user);
Blog blog = Blog.Create(u.Result.Account.RowKey, post, title).Save();
return new
{
id = blog.Id
};
}
私のhtmlクライアントはこのようなものです
var d = {
post: post,
title: title,
user: user
}
$.ajax({
type: 'POST',
url: apiUrl + 'Blog/Add',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify(d)
}).done(function (data) {
console.log(data);
}).fail(function (error) {
});
そして、これがルートAPI構成の私のコードです
config.Routes.MapHttpRoute(
name: "RPCApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new
{
id = RouteParameter.Optional
},
constraints: new
{
subdomain = new SubdomainRouteConstraint("api")
}
);
誰かがここで私を助けて、HTMLクライアントではなく郵便配達員で動作する理由を説明できますか?
これは、JSON が 3 つのプロパティを持つオブジェクトを表しているためです。あなたのコントローラーはオブジェクトを取らず、3 つのフィールドを取ります。要求メッセージを使用してペイロードを送信する場合、それをオブジェクトとして送信する必要があり、Web API には、要求メッセージを逆シリアル化できる単一のモデルが必要です。以下を変更すると機能し、JavaScript は変わりません。
これがこのように機能する理由と、同じ目標を達成するための他の方法については、Angular2 HTTP Post ASP.NET MVC Web APIに関する以前の回答を参照してください(タイトルのクライアント フレームワークは無視してください。回答は Web API 2 に固有のものです) )
モデル
public class SomethingToPost{
[Required]
public string Post{get;set;}
[Required]
public string Title{get;set;}
public string User{get;set;}
}
コントローラ
[AcceptVerbs("POST")]
public dynamic Add(SomethingToPost postThing)
{
// validation on ModelState
// action code
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加