Asp.net mvc 重写ExecuteSult方法并设置内容类型
我从ActionResult继承了一个类,然后重写了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
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门户中,我没有找到任何属性来修改此行为。这也是本地调试中所有工作正常的原因。