2011-06-23 14 views
10

私はこの問題を解決するために苦労しています。私のローカルマシン(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); 
    } 
} 

何か助けていただければ幸いです。

答えて

15

IISがレスポンスを食べているように見え、それを使ってカスタムエラーの処理をしようとしています。

は、あなたのキャッチで

Response.TrySkipIisCustomErrors = true 

を設定してみてください。

はまた、以下の設定値を設定:

<httpErrors errorMode="Custom" existingResponse="PassThrough"/> 
+0

ニース1を、IISのカスタムエラーが邪魔になって考えられていませんでした。 HandleErrorsAttributeはTrySkipCustomErrorsを設定しますが、JSONレスポンスでステータスを直接返すときは設定していませんでした。 –

関連する問題