クラスをActionResultから継承してから、ExecuteResultメソッドをオーバーライドしました。 ExecuteResultメソッドをオーバーライドしてContent-Typeを設定します。
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の」ではなく「アプリケーション/ jsonの」CustomResultクラスにsettedとしてあります。このアプリケーションをローカルで実行すると、すべて正常に動作しますが、このアプリケーションをAzure Appサービスにデプロイすると、Content-Typeは常にtext/htmlになります。
これはハックのように聞こえる。私はあなたのWebパイプラインで何かが間違っていると推測して、 "text/html"であるIISのWebエラーページに応答します。 – Saca
私はいくつかのテストを行いましたが、この問題はHTTP 500ステータスコードの場合にのみ発生します。私はAzure WebApp IISパイプラインに関するドキュメントを見つけていないので、HTTP 500ステータスコードAzureにはtext/html Content-Typeへの応答を変更するデフォルトの動作があると考えます。 Azureポータルでは、この動作を変更するプロパティは見つかりませんでした。これはまた、ローカルデバッグのすべてが正しく動作する理由です。 – Matteo