c# webapi返回html,c#-从Web API 2端点返回自定义HTTP状态代码
c#-從Web API 2端點返回自定義HTTP狀態代碼
我正在使用WebAPI 2中的服務,并且端點當前返回IHttpActionResult。我想返回狀態碼BadResult(message),但是由于它不在422枚舉中,所以我不知所措 發送,因為所有構造函數都需要一個HttpStatusCode參數
就目前情況而言,我將返回BadResult(message),但是返回422 +消息對我的客戶來說更具描述性和實用性。 有任何想法嗎?
5個解決方案
78 votes
根據C#規范:
枚舉類型可以采用的一組值不受其枚舉成員的限制。 特別是,枚舉的基礎類型的任何值都可以轉換為枚舉類型,并且是該枚舉類型的不同有效值
因此,您可以將狀態代碼422強制轉換為HttpStatusCode。
控制器示例:
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace CompanyName.Controllers.Api
{
[RoutePrefix("services/noop")]
[AllowAnonymous]
public class NoOpController : ApiController
{
[Route]
[HttpGet]
public IHttpActionResult GetNoop()
{
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)422,
new HttpError("Something goes wrong")
)
);
}
}
}
lilo.jacob answered 2020-02-29T15:05:06Z
23 votes
return Content((HttpStatusCode) 422, whatEver);
功勞是:對于非OK響應,返回帶有IHttpActionResult的內容
并且您的代碼必須為<= 999
請忽略100到200之間的代碼。
peyman answered 2020-02-29T15:05:34Z
3 votes
我用這種方式簡單而優雅。
public ActionResult Validate(User user)
{
return new HttpStatusCodeResult((HttpStatusCode)500,
"My custom internal server error.");
}
然后是角度控制器。
function errorCallBack(response) {
$scope.response = {
code: response.status,
text: response.statusText
}});
希望對您有幫助。
Ricardo G Saraiva answered 2020-02-29T15:06:03Z
0 votes
為此,您可能需要使用操作過濾器屬性。 沒有什么花哨。 只需創建一個類并從c#中的ActionFilterAttribute類繼承即可。 然后重寫名為OnActionExecuting的方法以實現此方法。 然后,只需在任何控制器的頭上使用此過濾器即可。 以下是一個演示。
在需要在ActionFilterAttribute中生成基于自定義狀態代碼的消息的情況下,可以通過以下方式編寫:
if (necessity_to_send_custom_code)
{
actionContext.Response = actionContext.Request.CreateResponse((HttpStatusCode)855, "This is custom error message for you");
}
希望這可以幫助。
Sajeeb Chandan answered 2020-02-29T15:06:32Z
0 votes
另一個簡化的示例:
public class MyController : ApiController
{
public IHttpActionResult Get()
{
HttpStatusCode codeNotDefined = (HttpStatusCode)422;
return Content(codeNotDefined, "message to be sent in response body");
}
}
Content是在抽象類ApiController(控制器的基礎)中定義的虛擬方法。 參見以下聲明:
protected internal virtual NegotiatedContentResult Content(HttpStatusCode statusCode, T value);
themefield answered 2020-02-29T15:06:59Z
總結
以上是生活随笔為你收集整理的c# webapi返回html,c#-从Web API 2端点返回自定义HTTP状态代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核rest_init分析
- 下一篇: 这可能是全中国最靠谱的星座指南