私はこの問題を解決するために苦労しています。私のローカルマシン(Win7/VS2010/IIS 7.5)と別の開発者のマシンでは、次のコードは500のステータスコードを返し、 "指定された電子メールアドレスでユーザーを見つけることができませんでした"という応答テキストが表示されます。JSONを使用してASP.NET MVC 3.0でエラーが発生した場合に正しい応答を返すにはどうすればよいですか?
テストサーバー(Win2008 R2/IIS7.5)にサイトを展開すると、正しいステータスコードが返されますが、コンテンツタイプは "text/html"に設定され、responseTextにはメッセージは含まれません。
サーバーでカスタムエラーをオフにしてみましたが、違いはありませんでした。誰でも問題が何であるかを見分けることができますか?
IはAjaxHelper.BeginForm法を用いて構成されている形態を有する:JavaScript関数をエラー処理と
@using (Ajax.BeginForm("FindUser", new AjaxOptions {OnSuccess="findComplete", OnFailure="findFailed"})
{
<fieldset>
@Html.EditorFor(m => m.UserEmail)
<div class="form-item button search">
<input type="submit" value="Find"/>
</div>
<div id="find-err" class="message error hidden">
<div class="contents"></div>
</div>
</fieldset>
}
を:
function findFailed(result) {
var error = result.responseText;
if (error) {
$('#find-err .contents').text(error).slideDown();
}
}
コントローラのアクションはすべてのエラーをキャッチし、メッセージを返します。
[HttpPost]
public ActionResult FindUser(FindUserModel model)
{
try
{
// code to find user
if (user == null)
{
throw new Exception("Could not locate user with specified email address.");
}
if (Request.IsAjaxRequest())
{
return Json(new { id = user.Id, name = user.Name }, JsonRequestBehavior.AllowGet);
}
model.FoundUser = user;
return View("Details", model);
}
catch (Exception ex)
{
if (Request.IsAjaxRequest())
{
Response.StatusCode = 500;
return Json(ex.Message, JsonRequestBehavior.AllowGet);
}
ModelState.AddModelError("UserEmail", ex.Message);
return View(model);
}
}
何か助けていただければ幸いです。
ニース1を、IISのカスタムエラーが邪魔になって考えられていませんでした。 HandleErrorsAttributeはTrySkipCustomErrorsを設定しますが、JSONレスポンスでステータスを直接返すときは設定していませんでした。 –