相关疑难解决方法(0)

如何在ASP.NET MVC中模拟Server.Transfer?

在ASP.NET MVC中,您可以非常轻松地返回重定向ActionResult:

 return RedirectToAction("Index");

 or

 return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Run Code Online (Sandbox Code Playgroud)

这实际上会提供HTTP重定向,这通常很好.但是,当使用谷歌分析时,这会导致很大的问题,因为最初的引用会丢失,所以谷歌不知道你来自哪里.这会丢失有用的信息,例如任何搜索引擎术语.

作为旁注,此方法的优点是可以删除任何可能来自广告系列但仍允许我捕获服务器端的参数.将它们留在查询字符串中会导致人们加入书签或推特或博客链接,而这些链接不应该存在.我已经多次看到这样的情况,人们在我们的网站上链接了包含广告系列ID的链接.

无论如何,我正在为网站的所有传入访问写一个"网关"控制器,我可能会重定向到不同的地方或替代版本.

现在我更关心谷歌(比意外的书签),我希望能够发送访问/该页面的人,如果他们去了/home/7,这是主页的第7版.

就像我之前说的如果我这样做,我失去了谷歌分析引用者的能力:

 return RedirectToAction(new { controller = "home", version = 7 });
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一个

 return ServerTransferAction(new { controller = "home", version = 7 });
Run Code Online (Sandbox Code Playgroud)

这将使我看到没有客户端重定向的视图.我不认为这样的事情存在.

目前我能想到的最好的事情是HomeController.Index(..)在我的GatewayController.IndexAction中复制整个控制器逻辑.这意味着我必须'Views/Home'进入,'Shared'因此它是可访问的.肯定有更好的办法??..

asp.net-mvc server.transfer

123
推荐指数
8
解决办法
7万
查看次数

MVC:如何在第一个路由参数中管理URL中的slahses

我需要在我的ASP MVC应用程序中将两个可能包含斜杠的变量映射到控制器.让我们看一个例子.

在此输入图像描述

  • 存储库和路径将是URL编码的参数.
  • 存储库可以有0个斜杠或1个斜杠作为最大值(rep或rep/module)
  • 路径可以有任意数量的斜杠.

例如,这些是有效的URL:

http://mysite/rep/Items
http://mysite/rep/module/Items/foo/bar/file.c
Run Code Online (Sandbox Code Playgroud)

有人可以就如何定义这条路线提出一些建议吗?

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

6
推荐指数
1
解决办法
2526
查看次数

如何使ASP.NET路由转义路由值?

我有一个ASP.NET MVC站点,我想要路由/{controller}/{id}/{action}/{date},其中"date"是日期/时间的mm/dd/yyyy部分.(我正在处理时间尺寸的数据,所以我需要一个ID和一个时间点来完成大多数操作)

这个的路线很简单:

routes.MapRoute(
    "TimeDimensionedRoute",
    "{controller}/{id}/{action}/{date}",
    new { controller = "Iteration", action = "Index", id = String.Empty, date = String.Empty }
);
Run Code Online (Sandbox Code Playgroud)

此路线正确地将" / Foo/100/Edit/01%2F21%2F2010 " 映射到所需的操作.更新:这是不正确的.这没有正确路由,我错了.请参阅已接受答案中链接的相关问题.

我的问题是,当我使用Html.ActionLink()生成此路由的链接时,它不会对日期进行URL编码,最终会出现无效的URL,例如" / Foo/100/Edit/01/21/2010 ".

有没有办法让路由基础设施为我编码值?我必须手动对我传递给HTML帮助程序的数据进行URL编码似乎是错误的.

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

5
推荐指数
1
解决办法
5015
查看次数

ASP.NET MVC 4参数由正斜杠分隔"/"未正确传递args

我试图遵循许多站点使用的约定,该约定使用多个正斜杠传递参数,而不是使用GET模型.

也就是说,我希望使用以下URL:

http://www.foo.bar/controller/action?arg1=a&arg2=b&arg3=c
Run Code Online (Sandbox Code Playgroud)

以这种方式:

http://www.foo.bar/controller/action/a/b/c
Run Code Online (Sandbox Code Playgroud)

我目前有(大多数)工作,使用以下内容:

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Sandbox",
            url: "Sandbox/{action}/{*args}",
            defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional }

        );
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我传递类似的东西

http://www.foo.bar/Sandbox/Index/a 
Run Code Online (Sandbox Code Playgroud)

要么

http://www.foo.bar/Sandbox/Index/a/
Run Code Online (Sandbox Code Playgroud)

控制器和操作适当地称为:

public ActionResult Index(string args)
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

但是args是null.

但是,如果我传递的内容如下:

http://www.foo.bar.com/Sandbox/Index/a/b
Run Code Online (Sandbox Code Playgroud)

然后根据需要,args是"a/b".

我一直在搜索SO和网络的其余部分,但似乎无法找到解决方案.

是否有一些明显的东西我缺少纠正这种行为?

我在寻找错误的术语吗?

注意:我能够使用Windows身份验证使用全新的ASP.NET应用程序重现此问题.所有这一切:

  1. 在VS 2015中创建ASP.NET应用程序
  2. 选择MVC
  3. 单击更改身份验证
  4. 选择Windows身份验证
  5. 将上面的Map Route添加到RouteConfig.cs …

c# asp.net asp.net-mvc asp.net-mvc-4

5
推荐指数
1
解决办法
1669
查看次数

如何在ASP.NET MVC Razor中编码'/'

控制器:

public ActionResult Tool(string id)
{
  // Code goes here . . 
}
Run Code Online (Sandbox Code Playgroud)

视图:

<a href="/Home/@item.Type/@Url.Encode(item.Title)" id="toolTitleLink">@item.Title</a>
Run Code Online (Sandbox Code Playgroud)

从上面的代码@item.Title可以有特殊字符,如'/'示例链接是http://localhost:39727/Home/Tool/C+Compiler+For+The+Pic10%2f12%2f16+Mcus当我尝试导航到该链接Tool Controller未被调用.我曾经使用@Url.Encode但仍未Controller被召唤.

c# asp.net-mvc razor

5
推荐指数
1
解决办法
890
查看次数