在我的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
根本不起作用并给出错误。我在Google上搜索了很多,发现语法是正确的,但无法确定我在哪里出了错,这限制了CustomerController使用/api/Customers/search
任何人都可以帮助我知道如何使用[RoutePrefix]映射CustomerController的方式。
非常感谢。
答案 0 :(得分:4)
问题不是RoutePrefix
与您的控制器名称不同(如果需要,您可以设置RoutePrefix("abcdefg")
),而是您指定了location
,customerName
,phoneNumber
和email
作为URL中的必需路径,因此只有这样的URL才能在您当前的设置中起作用:/api/Customers/search/EU/cust1/1234/email
。
您可能想要的是查询字符串,而不是URL中的值。例如:/api/Customers/search?location=EU&customerName=cust1&phoneNumber=123
。因此,只需将您的路线更改为[Route("search")]
,这样的URL就可以使用!
通过URL传递多个可选值的操作将不起作用,如果传递诸如api/Customers/search/value
之类的URL会怎样。服务器将如何知道value
应该是location还是customerName?
这里是有关网址参数和查询字符串的问题:What is the difference between URL parameters and query strings?