私はWebAPI 2のサービスに取り組んでおり、エンドポイントは現在IHttpActionResult
を返します。ステータスコード_422
_を返したいのですが、それはHttpStatusCode
列挙型ではないので、すべてのコンストラクタにはHttpStatusCode
のパラメーター
現状では、BadResult(message)
を返していますが、_422
_ +メッセージを返す方がよりわかりやすく、クライアントにとって便利です。何か案は?
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")
)
);
}
}
}
return Content((HttpStatusCode) 422, whatEver);
クレジットは: OK以外の応答に対してIHttpActionResultでコンテンツを返す
コードは999以下でなければなりません
100〜200のコードは無視してください。
この方法はシンプルでエレガントです。
public ActionResult Validate(User user)
{
return new HttpStatusCodeResult((HttpStatusCode)500,
"My custom internal server error.");
}
次にangular controller。
function errorCallBack(response) {
$scope.response = {
code: response.status,
text: response.statusText
}});
お役に立てば幸いです。
このために、Action Filter Attributeを使用する必要がある場合があります。派手なものは何もありません。クラスを作成し、c#のActionFilterAttribute
クラスから継承するだけです。次に、OnActionExecuting
という名前のメソッドをオーバーライドして、これを実装します。次に、コントローラーのヘッドでこのフィルターを使用します。以下はデモです。
ActionFilterAttribute
でカスタムステータスコードベースのメッセージを生成する必要がある場合、次の方法で記述できます。
if (necessity_to_send_custom_code)
{
actionContext.Response = actionContext.Request.CreateResponse((HttpStatusCode)855, "This is custom error message for you");
}
お役に立てれば。
別の簡単な例:
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<T> Content<T>(HttpStatusCode statusCode, T value);