/ / Як створити спеціальний атрибут web api 2 та повернути його клієнту? - c #, asp.net-mvc, asp.net-web-api2

Як створити web апі 2 атрибута і повернути його клієнту? - c #, asp.net-mvc, asp.net-web-api2

Я хочу створити користувальницький атрибут web api 2 з параметром від клієнта, і повернути дані клієнту там щось не так.

наприклад, дані клієнта:

{ id : 1, _token : 221 }

наприклад на сервері:

//SomeController Action
[CustomActionFilter]
public String Foo(int id)
{
return id;
}

public class CustomActionFilter : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
//get _token from client httprequest parameter
//return to client if _token != 221
//next proccess if _token == 221
// in real case, will cek token in db and compare it
}
}

будь ласка, допоможіть, як дістатися _token в CustomActionFilter і повернутися до повідомлення про помилку клієнта у форматі json, якщо _token ! = 221?

також якщо жодна проблема з процесом не зробить наступний процес?

Відповіді:

2 для відповіді № 1

Ви робите ряд речей неправильно. По-перше, ActionFilterAttribute сам реалізував IActionFilter, тому більше не потрібно повторно реалізовувати цей інтерфейс у вашому користувальницькому атрибуті. По-друге, маркер не передається функції Foo, тому в основному вам потрібно змінити формальні параметри функції Foo. Однак, щоб дати вам уявлення, як це зробити, перевірте це:

public class CustomActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var id = actionContext.ActionArguments["id"];
}
}

Нарешті, щоб повернути помилку, ви можете зробити це прямо в методі OnActionExecuting:

var response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "my reasonable error message");
actionContext.Response = response;