如何在asp.net MVC4中为web api Url创建通用方法

时间:2016-05-30 12:36:51

标签: json asp.net-mvc-4 c#-4.0 asp.net-web-api

我开始使用Web Api。我尝试为所有web api请求创建一个主方法,例如在下面的Snapshot中,方法名称为GetMenu(),参数为userpkid。

snapshot 1

现在,我将尝试为web api创建Common Method。当请求来自web api而不是它们分离方法名称和参数时,比动态调用任何方法名称并传递参数。对于示例请求来自菜单控件,而不是它们进入菜单控件中的任何方法名称和参数(如果请求来自国家/地区控制),而不是进入国家/地区控制中的任何方法名称和参数所以我怎么能实现这一目标..

Snapshot 2

1 个答案:

答案 0 :(得分:1)

解决方案取决于参数名称是否重要。 By default within Microsoft Web Api, the query string parameter name must match the parameter variable name of the method。例如:

如果网址是

"api/MenuData/GetMenu?UserPKId=1"

然后控制器方法必须具有以下参数列表

public MyModel CommonWebApiMethod(string MethodName, string UserPKId)

不重要的参数名称

配置路线:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "MethodName",
            routeTemplate: "api/MenuData/{MethodName}",
            defaults: new { controller = "Common", action = "CommonWebApiMethod" }
        );
    }
}

控制器:

public class CommonController : ApiController
{
    [HttpPost]
    public MyModel CommonWebApiMethod(string MethodName, string parameter)
    {
        return new MyModel { MethodName = MethodName, Parameter = parameter };
    }
}

致电网址:

"api/MenuData/GetMenu?parameter=1"

重要参数名称

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "ParameterName",
            routeTemplate: "api/MenuData/{MethodName}/{parameterName}",
            defaults: new { controller = "Common", action = "CommonWebApiMethod" }
            );
    }
}

控制器:

public class CommonController : ApiController
{
    [HttpPost]
    public MyModel CommonWebApiMethod(string MethodName, string parameterName, string parameter)
    {
        return new MyModel { MethodName = MethodName, Parameter = parameter };
    }
}

致电网址:

"api/MenuData/GetMenu/UserPKId?parameter=1"