programing

MVC를 반환한다.Json Result + Response 설정.상태 코드

stoneblock 2023. 2. 28. 23:12

MVC를 반환한다.Json Result + Response 설정.상태 코드

프로젝트: .net 4.0 프레임워크에서 실행되는 ASP MVC 4:

VS 2010 Express(또는 로컬머신에서 IIS 7.5로 전개되어 실행 중)에서 애플리케이션을 실행하는 경우 액션의 다음 결과(의사코드)가 예상대로 동작합니다.

[HttpPost]
public ActionResult PostWord(Model model)
{
   ....
   Response.StatusCode = 400;
   Return new JsonResult { data = new {fieldName = "Word", error = "Not really a word!" } };

(콘텐츠를 할당했습니다).동작에 차이가 없는 JsonResult 개체의 유형 및 ContentEncoding 속성)

전개 가능 파일을 웹 호스트(IIS 7 사용)로 이동하면 firebug에 의해 응답은 예상대로(400)이지만 응답에 JSON이 없습니다(즉, 텍스트는 없습니다).선을 제거하면

Response.StatusCode = 400;

액션에 의해 JSON은 응답으로 완벽하게 형성되지만, 물론 응답 상태 코드는 200(OK)이므로 Javascript 소비와 적절한 함수 호출에 방해가 됩니다.

무슨 일이 일어나고 있는지, 어떻게 고칠지 생각나는 거 없어요?감사해요.

저도 같은 문제가 있었습니다만, (저와 마찬가지로) 정답이 코멘트에 묻히지 않게 하기 위해서, @Sprockincat의 코멘트를 재차 강조하고 싶습니다.

적어도 저는 IIS 커스텀에러에 관한 문제였기 때문에, 다음의 방법으로 해결할 수 있습니다.

Response.TrySkipIisCustomErrors = true;

@Sprockincat - 당신은 이것을 인정받아야 합니다.진단하기 어려운 문제에 대한 미묘한 수정이기 때문에 더 잘 보이게 하는 것입니다.

HttpStatusCode를 지정할 수 있는 JsonResult의 서브클래스를 만들었습니다.

public class JsonResultWithHttpStatusCode : JsonResult
{

    private int _statusCode;
    private string _statusDescription;

    public JsonResultWithHttpStatusCode(object data, HttpStatusCode status) 
    {
        var code = Convert.ToInt32(status);
        var description = HttpWorkerRequest.GetStatusDescription(code);
        Init(data, code, description);
    }

    public JsonResultWithHttpStatusCode(object data, int code, string description)
    {
        Init(data, code, description);
    }

    private void Init(object data, int code, string description)
    {
        Data = data;
        _statusCode = code;
        _statusDescription = description;
    }

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

그런 다음 결과를 반환하면 응답에 상태 코드가 설정됩니다.테스트 결과에 따라 상태 코드를 테스트할 수도 있습니다.

ASP에서 찾으시는 분들을 위해.NET Core 를 설정할 수 있습니다.StatusCode의 특성JsonResult.

https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.jsonresult.statuscode

언급URL : https://stackoverflow.com/questions/17183004/return-mvc-jsonresult-plus-set-response-statuscode