2017-03-18 3 views
0

asp .netコアコントローラの応答フォームを返すと、2つの方法でデータを返すことができます(もっと多いかもしれませんが、私はこれらの2つに集中しています)。私の質問は、(もしあれば)2つのメソッドの違いは何ですか?身体に直接書くことと値を返しますか?関数の戻り値の型上記の方法でBody.Writeと文字列の返りに違いはありますか?

[HttpGet("Fetch_Write")] 
    public void Fetch_Write() 
    { 
     HttpContext.Response.ContentType = "application/json"; 
     var s = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new { data = "my_fetched_data" })); 
     HttpContext.Response.Body.Write(s, 0, s.Length); 
    } 

無効であると私はレスポンスボディに直接コンテンツを書いていますが、私の機能以下のバージョンは、文字列を返します。郵便配達員を使用するとき、私は両方のAPI呼び出しから同じ応答を得ます、2つの間に違いはありますか?もう片方を使うべきですか?

[HttpGet("Fetch_Return")] 
    public string Fetch_Return() 
    { 
     HttpContext.Response.ContentType = "application/json"; 
     return JsonConvert.SerializeObject(new { data = "my_fetched_data" }); 
    } 

私の推測がある文字列を返す関数は、後に、私は最初のコードスニペット機能で行っているが、私はわからないとして、それは身体に内容を書き込むラインの下の似た何かをするということです。

答えて

2

大きな違いはありません。しかし実際には、ボイラープレートとASP.NET Core MVCツールを十分に活用していないので、両方を避けるべきです。

それは(などOkBadRequestNotFoundFile)戻り値の型として代わりにIActionResultを使用して、ヘルパーメソッドのいずれかを使用するのが最善ですか、直接OkObjectResult/OkResultクラスを作成し、それらを返します。これにより、ステータスコードを設定し、呼び出し元の受け入れられたヘッダーに依存する正しいフォーマッタ(XMLまたはjson、後で多分OData、protobufまたはカスタムフォーマッタ)をASP.NET Coreに選択させることができます。例えば

[HttpGet("Fetch_Return")] 
[Produces("application/json"),Produces("application/xml")] 
public string Fetch_Return() 
{ 
    return Ok(new { data = "my_fetched_data" }); 
} 

[Produces("application/json"),Produces("application/xml")]はXMLとJSONフォーマットが可能になります。したがって、ユーザがAccept: application/xmlでこのアクションを呼び出すと、彼はxmlファイルを受け取り、Accept: application/jsonでコールします。 application/textを要求すると、ブラウザはHttp Code 415 "Unsupported Media Type"を返します。

関連する問題