我是web api的新手,我正在创建一个带有默认Web API的演示,我看到ValuesController默认有4个函数Get,Post,Put和Delete。我看到ValuesController实现了4个无法修改的ApiController函数。那么,我可以按价格或模型编写更多搜索项目等功能吗?如果可以,浏览器上的哪个url为新函数运行调试?
三江源
答案 0 :(得分:0)
听起来您需要向控制器添加新操作。您需要在WebApiConfig.cs文件中修改(或添加)您的路由以包含操作映射。
例如,假设您使用附加函数GetTestString1和GetTestString2更新Controller:
public class TestController : ApiController
{
public String GetTestString1(int id)
{
return "Test String 1 for " + id;
}
public String GetTestString2(int id)
{
return "Test String 2 for " + id;
}
}
要执行到这些新功能的路由,您需要将以下内容添加到App_Start文件夹中的WebApiConfig.cs文件中:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// This mapping entry may already exist for you. Leave it alone
// so your existing default functions continue to work properly.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Add this to route your new functions:
config.Routes.MapHttpRoute(
name: "TestStringApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
上面的routeTemplate“api / {controller} / {action} / {id}”是请求URL如何路由到您的控制器和操作(函数)。 URL的{controller}部分将路由到TestController类。 URL的{action}部分是您询问的附加功能,将根据您在URL中的请求映射到GetTestString1或GetTestString2。
当您将浏览器打开到此地址时,
http://localhost:60303/api/Test/GetTestString1/100
您在WebApiConfig.cs中注册的路径会将url映射到Testcontroller的GetTestString1操作(函数),并将100作为输入参数,并将“Test String 1 for 100”返回给浏览器。
你可以像这样调用你的Testcontroller的GetTestString2动作(函数)
http://localhost:60303/api/Test/GetTestString2/101
和“Test String 2 for 101”将返回浏览器。
您可以在此处详细了解默认功能的工作方式(获取,删除后)以及有关操作和参数的更多信息:
以下是与此主题类似的一些相关讨论: