0

httpエラーコードを使用してajax呼び出しへの応答を送信できるように、コントローラーをセットアップしようとしています。たとえば、ログイン ajax 呼び出しとコントローラー アクションがあります。

[System.Web.Mvc.HttpPost, System.Web.Mvc.AllowAnonymous]
public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl)
{
    [...]
    var loginError = new HttpResponseMessage(HttpStatusCode.Unauthorized)
    {
        Content = new StringContent("Lorem ipsum 2 " + ErrorMessages.LOGINERROR),
        ReasonPhrase = "Lorem ipsum 2 " + ErrorMessages.LOGINERROR
    };
    throw new HttpResponseException(loginError);
}

$.ajax({
    type: "POST",
    url: url,
    data: data,
    dataType: "text",
    success: callBack,
    error: function () { console.log("Error..."); },
    statusCode : {
        401: function (result) {
            console.log("Login failed (401): " + result);
        }
    }
});

私が正しく行っていないことがいくつかあると思います。誰かがそれらを指摘できれば、それは素晴らしいことです!

ありがとう!

4

2 に答える 2

1

例外をスローする代わりに、コンテンツとセットアップ応答コードを提供する ActionResult を返すだけです。あなたの場合、私が ExtendedJsonResult と呼ぶものを作成できます。

public class ExtendedJsonResult : JsonResult
{
    public ExtendedJsonResult(object data)
    {
        base.Data = data;
    }

    public int StatusCode { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.StatusCode = this.StatusCode;
        base.ExecuteResult(context);
    }
}

そしてコントローラーで

return new ExtendedJsonResult("Some error")
{
    StatusCode = 401,
};

既存のものを返すこともできますHttpStatusCodeResult

于 2013-03-04T18:58:09.480 に答える
1

このソリューションを見てください: ASP.NET MVC Ajax エラー処理

Darin Dimitrovは、アクション フィルターを使用して非常に優れたソリューションを作成します。

public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.ExceptionHandled = true;
        filterContext.Result = new JsonResult
        {
            Data = new { success = false, error = filterContext.Exception.ToString() },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }
}

次に、すべてのステータス コードのクライアント エラー処理を記述し、それを ajax リクエストに使用できます。

于 2013-03-04T19:28:50.710 に答える