В моем файле WebApiConfig.cs у меня есть:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
У меня есть OrderController
[RoutePrefix("api/Orders")]
public class OrderController : ApiController
{
[Authorize]
[Route("")]
public IHttpActionResult Get()
{
return Ok(Order.CreateOrders());
}
Как и ожидалось, приведенный выше код работает с URL - http://localhost:15660/api/Orders
У меня есть другой CustomerController:
[Authorize]
[RoutePrefix("api/Customers")]
public class CustomerController : ApiController
{
// GET api/customers/search
[HttpGet]
[Route("search/{location}/{customerName}/{phoneNumber}/{email}")]
public IHttpActionResult SearchCustomers(string location = null, string customerName = null, string phoneNumber = null, string email = null)
{
return Ok(GetCustomersSearchResults(location, customerName, phoneNumber, email));
}
Здесь я хочу позвонить как / api / Customers / search - но это выдает ошибку, если не найдено имя контроллера совпадений. Если я переименую префикс в
[RoutePrefix("api/Customer")]
тогда это прекрасно работает.
В Ordercontroller, api/Orders
работает отлично. В CustomerController почему api/customers
не работает вообще и выдает ошибку. Я много гуглил, нашел синтаксис правильный, но не могу понять, где я ошибаюсь, что ограничивает CustomerController для сопоставления с /api/Customers/search
Может кто-нибудь помочь мне узнать, как сопоставить CustomerController так, как я хочу использовать [RoutePrefix].
Большое спасибо.