Asp.net mvc 重写ExecuteSult方法并设置内容类型

Asp.net mvc 重写ExecuteSult方法并设置内容类型,asp.net-mvc,azure-web-app-service,Asp.net Mvc,Azure Web App Service,我从ActionResult继承了一个类,然后重写了ExecuteSult方法 public class CustomResult : ActionResult { public object Result { get; set; } public int StatusCode { get; private set; } public CustomResult(int statusCode, object Result) { this.Resul

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

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对象时,返回到视图的内容类型总是“text/html”,而不是CustomResult类上设置的“application/json”


如果我在本地运行此应用程序,一切正常,但当我将此应用程序部署到Azure应用程序服务时,内容类型始终为text/html。

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


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


我找到了解决办法!我添加了这一行
Response.tryskipiiscustomerors=true到响应对象。

我找到了解决方案!我添加了这一行
Response.tryskipiiscustomerors=true到响应对象。

我用Fiddler流量从本地实例和Azure Web应用程序捕获,因此,启动相同的请求时,我在本地使用响应应用程序/json,在Azure使用文本/html。我快疯了…请尝试部署一个新的Web应用程序。并检查webconfig或AppSettings中是否有设置我已部署到新的WebApp,但存在相同的问题。在Azure或web.config上的应用程序属性中,没有任何设置可能会建议内容类型的不同行为。我已使用Fiddler流量从本地实例和Azure web应用程序捕获,因此,启动相同的请求时,我已在本地响应application/json,在Azure响应text/html。我快疯了…请尝试部署一个新的Web应用程序。并检查webconfig或AppSettings中是否有设置我已部署到新的WebApp,但存在相同的问题。在Azure或web.config上的应用程序属性中,没有任何设置可能会提示content-type.Hmmm的不同行为。这听起来像是黑客行为。我猜您的web管道中出现了一些错误,导致响应是IIS web错误页面,即“text/html”。我已经做了一些测试,只有在HTTP 500状态代码的情况下才会出现此问题。我还没有找到任何关于Azure WebApp IIS管道的文档,因此我假设对于HTTP 500状态代码Azure,有一个默认行为修改对文本/html内容类型的响应。在Azure门户中,我没有找到任何属性来修改此行为。这也是为什么本地调试都能正常工作的原因。我猜您的web管道中出现了一些错误,导致响应是IIS web错误页面,即“text/html”。我已经做了一些测试,只有在HTTP 500状态代码的情况下才会出现此问题。我还没有找到任何关于Azure WebApp IIS管道的文档,因此我假设对于HTTP 500状态代码Azure,有一个默认行为修改对文本/html内容类型的响应。在Azure门户中,我没有找到任何属性来修改此行为。这也是本地调试中所有工作正常的原因。