私は、ASP.NET Web API 2を中央サーバーとして使用するWPFクライアントを使用しています。ステータスで、私はこの方法をステップ実行すると、それはreturn Ok(persons);
に出て要求が成功したように見えるIsSuccessStatusCodeの値がfalseになるのはなぜですか?
[HttpPost]
public IHttpActionResult Get()
{
IEnumerable<Person> persons;
try
{
persons = Db.People.ToList();
}
catch (Exception ex)
{
return new ExceptionResult(ex, this);
}
return Ok(persons);
}
、と私は応答がIsSuccessStatusCode == false
を持つWPFクライアント、に戻り、次の午前デバッグ:ウェブAPIでは、私はこのアクションを持っています"500 Internal Server Error"と何らかの理由で応答が何も表示されませんでしたか?
私は、一般的な方法でこのアクションを呼び出す:
People = await Rest.PostAsync<IEnumerable<Person>>("/api/Persons");
...
public async Task<TReturn> PostAsync<TReturn>(string resource)
{
var exMsg = $"Post request failed to get resource: '{resource}' from '{Client.BaseAddress}'.";
try
{
HttpResponseMessage response = await Client.PostAsync(resource, null);
if (!response.IsSuccessStatusCode)
{
Logger.Error(exMsg);
RaiseException(response, exMsg);
}
return JsonConvert.DeserializeObject<TReturn>(await response.Content.ReadAsStringAsync());
}
catch (Exception ex) when (ex.GetType() != typeof(RestClientException))
{
Logger.Error(ex, exMsg);
throw;
}
}
私はそれが失われることに応じて情報を原因と信じてリードしてきたので、私は醜い、毛布response.EnsureSuccessStatusCode()
を使用しないでください。
DataGrid
のコードを除いてコード変更なしでこれはまだ動作していましたが、何とかデータベース内のデータは変更したが、ソリューションのデータモデルコンポーネントは変更しなかったという事実。データ値だけを入力してから、アクションメソッドのToList()
がすべてのデータグレムリンを木工から引き出します。
私は唯一の500は、コントローラとクライアントの間で起こるHTTPを把握することができ、そして私が間違っている可能性が何を求めている、とどのように私はそれを診断することができますか?
はなぜuが取得できませんポストを使用していますか? – aguetat
@aguetatある時間前に私は学んだ。いくつかの理由から、ポストはAjaxにとってより安全であることを思い出さない。 MVCでは、 'JsonResult'クラスも、彼らが得るあり、そしてあなたが「AllowGet」 – ProfK
Uとそのデフォルトを上書きしていない場合はJSONレスポンスを期待して、ほぼすべての要求が失敗することを期待し、その' DenyGet'デフォルトは 'JsonRequestBehavior'性を有していますあなたのアクションの名前を変更する必要があります。あなたが "Get"と呼ぶとき、フレームワークはそれをGetアクションのようにみなします。 – aguetat