Asp.net mvc 4 如何获取get变量?

Asp.net mvc 4 如何获取get变量?,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我制作了一个名为LibraryController的控制器,它有一个名为Movie的ActionResult,它接受参数(intid) 我已尝试在RouteConfig.cs中添加以下路由: routes.MapRoute( name: "Movie", url: "Library/Movie/{id}", defaults: new { controller = "Library", action = "M

我制作了一个名为
LibraryController
的控制器,它有一个名为
Movie
ActionResult
,它接受参数(intid)

我已尝试在
RouteConfig.cs
中添加以下路由:

        routes.MapRoute(
            name: "Movie",
            url: "Library/Movie/{id}",
            defaults: new { controller = "Library", action = "Movie", id = (string)null }
        );
但是在方法
Movie(stringid)
id为null,即使我将浏览器重定向到
/Library/Movie/1


怎么了?
MapRoute
是在
Default

之前定义的,您应该使用
UrlParameter。可选

否则,解析路由的内部成员很可能会使用
null
调用您的操作/方法

路由可选参数值的正确实现为:

routes.MapRoute(
    name: "Movie",
    url: "Library/Movie/{id}",
    defaults: new { controller = "Library",
                    action = "Movie",
                    id = UrlParameter.Optional }
);
您的控制器和操作应为:

public class LibraryController : Controller
{
    public ActionResult Movie(string id)
    {
        // do something with id here
        return View();
    }
}

正如我在评论中提到的,尝试使用

id = UrlParameter.Optional or id ="MovieId" or id = ""


routes.MapRoute(
                name: "Movie",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Library", action = "Movie", id = UrlParameter.Optional }
            );
然后,您的控制器将如下所示:

    public class LibraryController : Controller
    {
        public ActionResult Movie(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            Movie m = _context.Movies.Find(id);

            if (m == null)
            {
                return HttpNotFound();
            }

            return View(m);
        }
    }

这是你的真实代码吗?因为
(int)null
不编译。。。您的操作中是否有
(int?)null
int?
?你们还有其他的定制路线吗?顺便说一下,有了这些给定的信息,我无法重新编写您的问题:在一个新的MVC4项目中,当我导航到
/Library/Movie/1
时,我在
id
中得到了正确的参数值1对不起,输入错误。。。它的绳子!编辑!杰森,你能发布你的控制器代码吗?我认为总的来说,您应该使用id=urlparmeter.Optional或id=“MovieId”。你想要什么样的网址?只有/Library/Movie/1?我相信nemesv是正确的,因为默认的路由和控制器索引/详细信息方法中的(int?id)将显示正确的结果。当然,您会希望通过ID获取您的电影对象。