Мы разрабатываем веб-API и хотим перехватить все запросы к нашему API, получить имя действия и проверить, есть ли он в нашей базе данных, и если да,
один метод поймать его.
На самом деле имя метода должно быть банковским счетом клиента!
я знаю, что это кажется странным, но нас попросили сделать это таким образом, скажем, у нас есть ниже адрес запроса
www.webSiteAddress.com/api/paya/123456789?amount=25&span=4587
123456789
- это банковский счет нашего клиента, который должен выступать в качестве имени действия!
но сначала мы должны проверить это из базы данных
я нашел решение, приведенное ниже, но оно не сработало.
public class IBanRoutingConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
object IBan;
values.TryGetValue("action", out IBan);
if (IBan!=null && db.Accounts.Any(x=>x.AccountNo==IBan))
{
return true;
}
return false;
}
}
и я использовал его как ограничение на маршрутизацию веб-API.
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "PayaApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = RouteParameter.Optional },
constraints: new { action = new IBanRoutingConstraint() });
}
но я закончил с этим сообщением ...
No action was found on the controller 'Paya' that matches the name '123456789'