C# 是否可以在url中的操作之前定义参数

C# 是否可以在url中的操作之前定义参数,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,这个问题和标题一样简单 是否可能有这样的路由:{controller}/{id}/{action} 这就是我现在的代码(只是一个简单的函数)(设备是我的控制器): 但是当我转到下面的URL时,浏览器说它找不到该页面:localhost/device/2/IsValid 当我尝试这个URL时,它工作得很好:localhost/device/IsValid/2 那么,是否可以使用localhost/device/2/IsValid而不是默认路由localhost/device/IsValid/2?如

这个问题和标题一样简单

是否可能有这样的路由:
{controller}/{id}/{action}

这就是我现在的代码(只是一个简单的函数)(
设备
是我的控制器):

但是当我转到下面的URL时,浏览器说它找不到该页面:
localhost/device/2/IsValid

当我尝试这个URL时,它工作得很好:
localhost/device/IsValid/2

那么,是否可以使用
localhost/device/2/IsValid
而不是默认路由
localhost/device/IsValid/2
?如何做到这一点


请随时询问更多信息!提前谢谢

RoutingConfig

config.Routes.MapHttpRoute(
    "RouteName",
    "{controller}/{id}/{action}"
    );

您正在使用属性路由。确保启用属性路由

对于MVCRouteConfig.cs

public class RouteConfig {

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        //...Other code removed for brevity
    }
}
内部控制器

[RoutePrefix("device")]
public class DeviceController : Controller {
    //GET device/2/isvalid
    [HttpGet]
    [Route("{id:int}/IsValid")]
    public bool IsValid(int id) {
        return true;
    }
}

您需要更改RouteConfig文件中的代码。public static void registerOutes(RouteCollection routes){routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);routes.MapRoute(“默认值”,//路由名称“{controller}/{id}/{action}”,//带有参数new{controller=“Home”,action=“Index”,id=”“}//参数默认值);}@RahulChavan什么是
th
?我必须在哪里添加它?App_startIs中的RouteConfig文件这对于web api或普通mvcIt也可以用于web api感谢您的帮助!:但是,为什么“
:int
”?我为什么要这样做?这是基于您的样本的约束。它也可以是
bool
long
。这是为了确保url中使用的类型符合您想要的类型。你不必这么做。阅读参考文章。
[RoutePrefix("device")]
public class DeviceController : Controller {
    //GET device/2/isvalid
    [HttpGet]
    [Route("{id:int}/IsValid")]
    public bool IsValid(int id) {
        return true;
    }
}