簡體   English   中英

ContentResult 與字符串

[英]ContentResult vs. string

最近有人問我為什么要使用ContentResult而不是返回string 不幸的是,我無法給出比“這是最佳實踐”更好的答案。

有人有更好的答案嗎?

為了更好地理解這個問題。 有什么不同?

public ActionResult Foo(){
    return Content("Some string");
}

public string Bar(){
    return "Some string";
}

如果您返回除ActionResult以外的其他內容,則默認行為是創建一個ContentResult將調用ToString()的結果包裝在您返回的任何內容上(如果返回null EmptyResult )。 我能想到的明確返回ContentResult

  • 它強化了這樣一個事實,即方法是一個動作,而不是常規方法,因此開發人員不太可能犯錯誤,比如隨意重命名它。
  • 如果將來您需要指定內容類型,則不需要更改方法簽名。
  • 它不會隱藏ToString()調用。 如果您返回string ,這無關緊要,但返回復雜類型可能會產生意外結果。

您不能在返回 ActionResult 的方法上返回字符串,因此此時您可以使用 ContentResult 返回一個純字符串,如下所示:

public ContentResult Hello()
{
    return Content("hello world!");
}

ContentResult 默認返回一種text/plain類型。 如果您只需要返回一個字符串,那么您將使用該方法返回一個字符串

兩大優勢:

  • 您可以通過ContentEncoding屬性指定內容編碼
  • 您可以通過ContentType屬性指定內容類型(即“text/html”)

此外,如果您想對它保持面向對象的清潔,那么ContentResult以及所有ActionResult派生類都遵循命令模式,為 MVC 管道提供ExecuteResult命令以運行。

更新:2020 年 11 月 19 日原始命令模式鏈接( 死鏈接)不再有效,因此我更新了它以引用類似的 Microsoft 文檔。 此外,要查看有關命令模式的精彩解釋,請查看此鏈接

返回 ContentResult 有助於保護您的應用程序。

例如,如果您的應用程序允許來自用戶的輸入,惡意用戶可能會嘗試解析 javascript 文本。 這將阻止 javascript 在您的應用程序中執行

我所知道的一個區別是:

如果需要,內容返回結果不帶引號。

字符串返回結果一直在引號中。

另一個區別是內容結果可以返回不同內容的結果。 如字符串、Html、JavaScript 結果等。

但字符串只返回字符串結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM