覆盖ExecuteResult方法并设置Content-Type

时间:2016-12-27 17:44:57

标签: asp.net-mvc azure-web-sites

我从ActionResult继承了一个类,然后重写了ExecuteResult方法。

public class CustomResult : ActionResult
{
    public object Result { get; set; }
    public int StatusCode { get; private set; }

    public CustomResult(int statusCode, object Result)
    {
        this.Result = Result;
        this.StatusCode = statusCode;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
            throw new ArgumentNullException("context");

        context.HttpContext.Response.StatusCode = StatusCode;
        if (StatusDescription != null)
            context.HttpContext.Response.StatusDescription = StatusDescription;

        HttpResponseBase Response = context.HttpContext.Response;
        Response.Charset = "UTF-8";
        Response.ContentType = "application/json";
        context.HttpContext.Response.Write(JsonConvert.SerializeObject(this));
    }
}

当我从控制器返回一个CustomResult对象时,返回的Content-Type到视图总是" text / html"而不是" application / json"在CustomResult类上设置。

如果我在本地运行此应用程序一切正常,但当我将此部署到Azure App Service时,Content-Type始终为text / html。

2 个答案:

答案 0 :(得分:0)

根据我的经验,它可以在Azure Web App中正常运行。即使我将WebApp发布到Azure环境,它也能正常工作。如果可能,请尝试使用Fiddler工具进行检查。

enter image description here

答案 1 :(得分:0)

我找到了解决方案!我已将此行Response.TrySkipIisCustomErrors = true;添加到Response对象。