source

ASP에서 오류를 반환하는 방법.NET MVC 동작

factcode 2023. 8. 27. 09:57
반응형

ASP에서 오류를 반환하는 방법.NET MVC 동작

저는 ASP를 사용하고 있습니다.웹 사이트 개발을 위한 NET MVC.나는 AJAX 기능을 위해 jquery를 사용하고 있습니다.작업 방법에서 입력이 올바르지 않거나 작업을 수행할 수 없음을 알리는 오류를 반환하려고 합니다.이러한 오류의 경우, 저는 jquery agax 오류 처리기가 호출될 것으로 예상하고 거기서 적절한 조치를 취할 수 있습니다.나는 이것을 하는 방법을 찾지 못했습니다.저의 액션 방법은 다음과 같습니다.

오류가 발생한 경우 jquery 오류 처리기를 트리거하려면 액션에서 무엇을 보내야 합니까?

public ActionResult AddToFavourites(int entityId, string entityType)
    {

        if (!Request.IsAjaxRequest())
            throw new InvalidOperationException("This action can be called only in async style.");

        try
        {
            RBParams.EntityType typeOfFavourite = (RBParams.EntityType)Enum.Parse(typeof(RBParams.EntityType), entityType);
            string status = "";

            if (typeOfFavourite == RBParams.EntityType.BusinessEntity)
            {
                status = MarkFavouriteEntity(entityId);
            }
            else if (typeOfFavourite == RBParams.EntityType.Review)
            {
                status = MarkFavouriteReview(entityId);
            }
            else
            {
                throw new InvalidOperationException("The type of the entity is not proper");
            }

            return Content(status);

        }
        catch (Exception ex)
        {

            return Content("Error");
        }
    }

작업이 예상된 상태 코드를 반환하지 않으면 Ajax 오류 처리기가 호출됩니다.예를 들어 액션을 찾을 수 없거나 처리하지 않는 예외를 던질 경우 실행됩니다.이 경우 작업에서 오류가 발견되지 않으면 호출됩니다(작업에서 500 상태 코드가 반환됨).

그러나 예상 오류일 수 있으므로 이러한 방식으로는 수행하지 않습니다.저는 당신이 성공했을 때와 오류가 있을 때 둘 다 json을 돌려주고 싶습니다.그런 다음 성공적인 통화인지 여부를 지정할 수 있습니다.이와 같은 것:

public ActionResult AddToFavourites(int entityId, string entityType)
{

    if (!Request.IsAjaxRequest())
        throw new InvalidOperationException("This action can be called only in async style.");

    try
    {
        RBParams.EntityType typeOfFavourite = (RBParams.EntityType)Enum.Parse(typeof(RBParams.EntityType), entityType);
        string status = "";

        if (typeOfFavourite == RBParams.EntityType.BusinessEntity)
        {
            status = MarkFavouriteEntity(entityId);
        }
        else if (typeOfFavourite == RBParams.EntityType.Review)
        {
            status = MarkFavouriteReview(entityId);
        }
        else
        {
            throw new InvalidOperationException("The type of the entity is not proper");
        }

        return Json(new { Success = true, Status = status });

    }
    catch (Exception ex)
    {

        return Json(new { Success = false, Message = ex.Message });
    }
}

그런 다음 성공적인 통화와 같은 방식으로 처리합니다.json 응답의 Success 속성만 확인하면 됩니다.그런 다음 오류 콜백에서 예기치 않은 오류를 처리합니다.

마티아스 야콥슨의 대답은 옳습니다.하지만 jQuery에 오류를 반환하는 가장 좋은 방법은 JSON을 생성하여 상태 500으로 보내는 것이라고 생각합니다.그러나 IIS 7을 사용하여 MVC 웹 사이트를 배포하려고 할 때 메시지 대신 사용자 지정 페이지가 반환된다는 것을 알게 되었습니다.

코드는...

catch (Exception ex)
{
    Response.StatusCode = 500;
    return Json(new { error = ex.Message });
}

하지만 그때 저는 이 웹사이트로 저를 이끌었던 스레드를 보았습니다. (릭 스트랄의)

전반적으로 사용자 정의 오류 페이지를 삽입하지 않도록 IIS에 말해야 한다는 것을 이해했습니다. 따라서 다음 플래그가 필요합니다(global.asax 또는 catch).

대답.TrySkipIisCustomErrors = true;

따라서 jQuery에서는 코드가 동일하게 유지됩니다.

$.ajax({...})
.done(function (result) {...})
.fail(function (e) { 
   console.log(e.responseJSON.error);
});

오류를 처리하려면 jquery를 구성해야 합니다.

$.ajaxSetup({
    error: function(xhr) {
        alert(xhr.statusText);
    }
})

언급URL : https://stackoverflow.com/questions/2378023/how-to-return-error-from-asp-net-mvc-action

반응형