我可以在ApiController中创建更多功能吗?

时间:2013-11-09 05:55:44

标签: asp.net-mvc-4 asp.net-web-api

我是web api的新手,我正在创建一个带有默认Web API的演示,我看到ValuesController默认有4个函数Ge​​t,Post,Put和Delete。我看到ValuesController实现了4个无法修改的ApiController函数。那么,我可以按价格或模型编写更多搜索项目等功能吗?如果可以,浏览器上的哪个url为新函数运行调试?

三江源

1 个答案:

答案 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”将返回浏览器。

您可以在此处详细了解默认功能的工作方式(获取,删除后)以及有关操作和参数的更多信息:

以下是与此主题类似的一些相关讨论: