2017-01-22 36 views
0

我正在將MVC控制器重構爲不同類中的較小塊,並且我來到了一個部分,我返回一個「return StatusCode(500,」Some消息「)」項目。如何返回一個MVC控制器之外的StatusCode對象

據我所知,我似乎無法在控制器外進行此操作。

這是可能的,或者我必須找到一種替代方式返回響應,並將其轉換爲適當的類型回調用代碼(MVC的控制器)?

我可以看到自己擁有的一個問題是MVC操作的原始類型是IActionResult,因此在操作中我一直在返回任何適當的響應,有時查看(,模型),有時Json()和其他時間StatusCode(< 500>,),即我的迴應不一致。

對我來說,是否有一種自然的方式來取代並將此代碼移動到另一個類中以使其工作,或者我將不得不手工製作自己的對象來表示我將以其他方式並在控制器中返回的內容,並且如果那麼,建議什麼?

總之,理想的我希望能夠返回一個動作的結果,例如在一個類「返回視圖(」我的視圖名稱」就是myModel)控制器之外。 我怎樣才能做到這一點?

它感覺很髒,但也許包含一個包含狀態碼,消息,對象(作爲模型),視圖名稱和一個名爲ActionResultType的新枚舉的單個對象,其值爲「StatusCode」,「Json」和「View」 ,所以我可以很容易地合理它映射回它的合適的自然狀態,當控制器接收到響應。

也許我會有點遠,而是應該只專注於獲得邏輯的主要部分出的控制者,而不是試圖在別的地方建立一個更充實的迴應?

如果可能的話,我很想得到每個動作的結果約10行,但除非我能想出一個很好的方式返回從別的地方適當的響應,它可能是一個鬥爭。

+3

您的控制器之外的邏輯不應該知道或關心HTTP錯誤代碼,請將這些內容保留在您的MVC操作中。 – DavidG

+0

所有這些都有一個基本類型的ActionResult,所以我不知道是什麼問題。 –

+0

你可以嘗試使用「return InternalServerError(new Exception(」SOME CUSTOM MESSAGE「));」 –

回答

0

如果需要控制器之間共享的代碼,則可以設置一個基本控制器以保持共享代碼和繼承需要訪問的任何其他控制器上基本控制器。

ActionResult包含所有你想要的東西。你想在你的自定義對象中的所有東西都作爲ActionResult的子類存在。 JsonResult是ActionResult的一個子類。每個錯誤代碼都有幾個子類。我相信HttpNotFoundResult是另一個。

我建議在你的控制器裏面保留大部分的ActionResult/Redirect/View/StatusCode。這是它通常位於的地方。

0

可以替代那些:

var result = new ObjectResult("Some message"); 
result.StatusCode = statusCode; 
return result; 

這是什麼的StatusCode助手方法做反正。

如果你並不需要的信息,然後你可以做:

return new StatusCodeResult(500); 

在文件的頂部只需添加using Microsoft.AspNetCore.Mvc;

相關問題