2016-12-27 10 views
1

クラスを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になります。

答えて

0

私は解決策を見つけました!この行をResponseオブジェクトに追加しました。Response.TrySkipIisCustomErrors = true;

+0

これはハックのように聞こえる。私はあなたのWebパイプラインで何かが間違っていると推測して、 "text/html"であるIISのWebエラーページに応答します。 – Saca

+0

私はいくつかのテストを行いましたが、この問題はHTTP 500ステータスコードの場合にのみ発生します。私はAzure WebApp IISパイプラインに関するドキュメントを見つけていないので、HTTP 500ステータスコードAzureにはtext/html Content-Typeへの応答を変更するデフォルトの動作があると考えます。 Azureポータルでは、この動作を変更するプロパティは見つかりませんでした。これはまた、ローカルデバッグのすべてが正しく動作する理由です。 – Matteo

0

私の経験に基づいて、Azure Web Appでは正常に動作する可能性があります。 Azure環境にWebAppを公開しても正しく動作します。可能であれば、Fiddlerツールでチェックしてみてください。

enter image description here

+0

私はローカルインスタンスとAzure Web AppからのFiddlerトラフィックをキャプチャしました。同じリクエストから始めて、私はAzureのlocal/text/htmlのapplication/jsonに応答しました。私は夢中になります... – Matteo

+0

新しいWebAppを展開しようとしてください。そして、Webconfigに何かが設定されているかどうか、または私が新しいWebAppにデプロイしたAppsettings –

+0

があるかどうかを確認しますが、同じ問題があります。 Azureまたはweb.configのアプリケーションプロパティには、コンテンツタイプの異なる動作を示唆する設定はありません。 – Matteo

関連する問題