Asp.net mvc 4 我可以在ApiController中创建更多函数吗?

Asp.net mvc 4 我可以在ApiController中创建更多函数吗?,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我是web api新手,我正在用默认web api创建一个演示,我看到ValuesController有默认的4个函数Get、Post、Put和Delete。我看到ValuesController向ApiController执行了4个无法修改的函数。那么,我可以编写更多的函数,比如按价格或型号搜索商品吗?如果可以,在浏览器上为新功能运行调试的url是什么 谢谢听起来您需要向控制器添加新操作。您需要在WebApiConfig.cs文件中修改(或添加)路由,以包含操作映射 例如,假设您使用附加函数G

我是web api新手,我正在用默认web api创建一个演示,我看到ValuesController有默认的4个函数Get、Post、Put和Delete。我看到ValuesController向ApiController执行了4个无法修改的函数。那么,我可以编写更多的函数,比如按价格或型号搜索商品吗?如果可以,在浏览器上为新功能运行调试的url是什么


谢谢

听起来您需要向控制器添加新操作。您需要在WebApiConfig.cs文件中修改(或添加)路由,以包含操作映射

例如,假设您使用附加函数GetTestString1和GetTestString2更新控制器:

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作为输入参数,并将“TestString1 for 100”返回到浏览器

您可以这样调用Testcontroller的GetTestString2操作(函数)

http://localhost:60303/api/Test/GetTestString2/101
“101的测试字符串2”将返回到浏览器

您可以在此处了解有关默认函数如何工作(get、post delete)的更多信息,以及有关操作和参数的更多信息:

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


按VS中的“调试开始”按钮,您的浏览器将启动,您可以在地址栏中看到地址。不,我不要求如何运行调试,我要求为web ApicController创建新功能,并使用“添加衣服”来运行该功能,谢谢