标签: asp.net-mvc-routing

如何编写允许在 ASP.NET MVC 中使用下划线的路由?

我在 MCTS 考试中遇到了以下问题。书上说答案是C,但我认为B这是正确的答案。为什么C

您创建了一个新的 ASP.NET MVC 2 Web 应用程序。在Global.asax.cs文件中创建了以下默认路由。(行号仅供参考。)

01 public static void RegisterRoutes(RouteCollection routes)
02 {
03 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
04
05 routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } );
06 }
Run Code Online (Sandbox Code Playgroud)

您实现了一个名为 HomeController 的控制器,其中包含具有以下签名的方法。

public ActionResult Index() 
public ActionResult Details(int id) 
public ActionResult DetailsByUsername(string username) 
Run Code Online (Sandbox Code Playgroud)

您需要添加一个路由以满足以下要求:

  • 当通过调用 DetailsByUsername 操作输入用户名作为路径时,必须显示用户的详细信息。

  • 用户名可以包含字母数字字符和下划线,长度可以在 3 到 20 个字符之间。你该怎么办?

A. 用以下代码段替换第 05 行。

routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc routing asp.net-mvc-routing

2
推荐指数
1
解决办法
1543
查看次数

如何使用MVC从另一个屏幕移动到另一个屏幕?

我有一个屏幕来创建MVC中的记录.如果模型验证,那么我想返回到我的主屏幕.我见过以下内容:

                return new RedirectToRouteResult(
                    new RouteValueDictionary(
                        new { controller = "Access", action = "Home" }
                    )
                );
Run Code Online (Sandbox Code Playgroud)

这似乎相当矫枉过正,因为它指定了控制器,我不想更改控制器.有更简单的方法吗?

asp.net-mvc asp.net-mvc-routing asp.net-mvc-3

2
推荐指数
1
解决办法
114
查看次数

如何在MVC3的自定义路由处理程序中指定命名空间?

我写了一个自定义路由处理程序.因为我的网站中的区域中存在冲突的控制器名称,所以我收到错误:找到了多个匹配控制器命名的类型...

我想我需要在我的处理程序中指定一个命名空间,对吧?

我尝试了以下,没有一个工作:

public class MyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {

        (... complicated DB lookups and "re-writing" of requestContext.RouteData.Values["controller"] ...)

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = new[] { "Site.Contollers" };

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", new[] { "Site.Contollers" });

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = "Site.Contollers";

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", "Site.Contollers");

        (... snip ...)

        return base.GetHttpHandler(requestContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

注意:因为我的处理程序执行数据库查找并根据结果选择不同的控制器,所以我不能在我的Global.asax.cs文件中使用基本的MapRoute()方法(据我所知).

asp.net-mvc namespaces mvcroutehandler asp.net-mvc-routing asp.net-mvc-areas

2
推荐指数
1
解决办法
3695
查看次数

MVC 3异常:参数字典包含方法'System.Web.Mvc'的非可空类型'System.Int32'的参数'id'的空条目

我的应用程序似乎运行正常,但我一直在log4net日志中获得这些异常:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Agency(Int32)' in 'COPSGMIS.Controllers.QuestionController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Run Code Online (Sandbox Code Playgroud)

不确定什么是错的?

我的控制器:

 public ActionResult Agency(int id)
        {
                QuestionDAL qd = new QuestionDAL();
                var agency = qd.GetAgencyDetails(id);
                agency.Reviews = qd.GetAgencyReviews(id);

                return View(agency);
        }
Run Code Online (Sandbox Code Playgroud)

我的路线:

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

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new …
Run Code Online (Sandbox Code Playgroud)

exception nullpointerexception asp.net-mvc-routing asp.net-mvc-3

2
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC4路由 - 到同一位置的多个路由

我正在设置单页面应用程序(SPA)并且想要设置,目前有两条路线.例如:

  • 路由1: http://localhost- 这是需要身份验证的默认路由(管理区域)
  • 路线2: http://localhost/<client>/<clients project name>/- 这不需要验证(仅限查看)

在管理方面,他们建立了<client><clients project name>,因此我知道我需要设置在MVC4路线此配置,但我不清楚我会怎么处理这个.

另一个警告是,如果<clients project name>未输入URL,它将为该客户端提供搜索页面.

asp.net-mvc asp.net-mvc-routing c#-4.0 asp.net-mvc-4 single-page-application

2
推荐指数
1
解决办法
7452
查看次数

路由,打错了动作

我有两个动作,每当我明确调用第二个动作时,第一个动作仍会被调用.我需要能够在mysite.com/api/Awesome/GetSomeExamples中编写,而不会总是触发GetAllClasses

public class AwesomeController : Controller
{
   public IEnumerable<myClass> GetAllClasses()
   {
      //...some stuff
   }
   public IEnumerable<string> GetSomeExamples()
   {
       //...some stuff
   }
     //... also have some more actions which take in one parameter
}
Run Code Online (Sandbox Code Playgroud)

我的路由是这样的,但不起作用

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

            routes.MapRoute(
                name: "ActionApi",
                url: "api/{controller}/{action}/{id}",
                defaults: new { id = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
Run Code Online (Sandbox Code Playgroud)

我收到错误:找到了与请求匹配的多个操作

asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-4

2
推荐指数
1
解决办法
1217
查看次数

如何在 ASP.NET MVC4 上将路由值约束为有效的 int32

有这个默认路由:

    routes.MapRoute(
        name: "Default", // Route name
        url: "{controller}/{action}/{id}", // URL with parameters
        defaults: new { controller = "Application", action = "Index", id = 0 }, // Parameter defaults
        constraints: new {id = @"\d+"}
    );
Run Code Online (Sandbox Code Playgroud)

约束工作正常,但 id 是控制器上的 int 。因此,如果我传递的/Controller/Action/2147483648是有效的 \d+ 正则表达式,但它不是有效的Int32,则返回 500 服务器错误,我希望它进行限制,以便返回404.

如何设置约束,使其只允许有效的正整数值?哪些来自0 to 2,147,483,647

asp.net-mvc-routing asp.net-mvc-4

2
推荐指数
1
解决办法
1182
查看次数

仅使用'x'前缀导致的神秘404路由错误?

我想保持我的网址尽可能短,所以我正在测试没有分隔符的路由,如下所示:

routes.MapRoute(
   name: "Photo",
   url: "x{id}",
   defaults: new { controller = "Content", action = "Photo" }
);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,上面的路线不起作用,我收到404错误:

无法找到该资源.

说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.

但是,当我为不同的字母更改x前缀时,例如g,它工作正常.

没有冲突的路线.我在这里想念的是什么?

编辑:

我再次看到这个问题,我观察到404可能只发生在id包含x,即路线喜欢/xa1B2/xZ9y8完美无缺,但x12xG失败了.请问有什么想法吗?

c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-5

2
推荐指数
1
解决办法
307
查看次数

MVC 5从BeginExecuteCore重定向到另一个控制器

我尝试从函数BeginExecuteCore重定向到另一个控制器所有我的控制器继承函数BeginExecuteCore我想做一些逻辑,如果发生的事情,所以重定向到"XController"

怎么做?

编辑:

Balde:我使用函数BeginExecuteCore我不能使用Controller.RedirectToAction

     protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
    {


        //logic if true Redirect to Home else .......


        return base.BeginExecuteCore(callback, state);
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

2
推荐指数
1
解决办法
2757
查看次数

约束条目“inboundHttpMethod”必须具有字符串值或者是实现“IHttpRouteConstraint”的类型

我正在尝试实现属性路由,但出现以下错误。

具有路由模板“authenticate”的路由上的约束条目“inboundHttpMethod”必须具有字符串值或者是实现“IHttpRouteConstraint”的类型

我已经在 Global.asax 中添加了代码行,

    AttributeRoutingHttpConfig.RegisterRoutes(GlobalConfiguration.Configuration.Routes);
Run Code Online (Sandbox Code Playgroud)

以及 AttributeRoutingHttpConfig.cs 中的以下代码,

routes.MapHttpAttributeRoutes(cfig =>
            {
                cfig.UseLowercaseRoutes = true;
                cfig.AutoGenerateRouteNames = true;
                cfig.AddRoutesFromAssemblyOf<AuthenticateController>();
                cfig.InMemory = true;
            });
Run Code Online (Sandbox Code Playgroud)

任何人都知道这个问题,实际上我是 c# 新手。

c# asp.net-mvc-routing asp.net-web-api

2
推荐指数
1
解决办法
1965
查看次数