标签: asp.net-mvc-routing

ASP.NET MVC切换语言,如何实现?

我已经开始将我的简单网站转换为ASP.NET MVC,只是为了搞乱它.我有一个切换语言功能,基本上将Session ["language"]设置为另一种语言并刷新页面.如果可以做得更好,请纠正我,但我为此制作了两个控制器并在那里设置会话.问题是最后的路由.我可以用一些简洁的方式刷新页面,还是可以获取当前的Action并将其重新路由到该页面?或者这更像是Ajax的场景?

感谢您的建议!

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

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

RedirectToAction和RedirectToRoute

在我的网页1控制器中,我想重定向到网页2,传递2个变量.

我尝试使用RedirectToRoute,但无法让它工作; 显示错误的URL.然后我切换到使用RedirectToAction.

我的代码:

路由

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index", userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

RedirectToAction(有效)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });
Run Code Online (Sandbox Code Playgroud)

RedirectToRoute(不起作用)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });
Run Code Online (Sandbox Code Playgroud)

哦,还有另外一件事,你可以制作所需的参数,而不是可选的....如果是这样,怎么样?

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

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

从WebAPI生成Route Url到MVC控制器操作

我习惯使用类似于下面的内容生成到MVC控制器操作中的其他控制器操作的路由URL:

public class ApplicationController : Controller
{
    public ActionResult Index( )
    {
        var url = Url.RouteUrl("routename",
           new { controller = "Application", Action = "Index2" , other="other" });
    }

    public ActionResult Index2( string other)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

但我也需要能够从webapi中生成到MVC控制器动作的URL,我将如何进行此操作?

APIController上似乎有一个UrlHelper属性,但我找不到任何如何使用它的例子,但我自己也无法弄明白.

更新:我尝试生成URL的原因是这个特定的webapi方法发送一封电子邮件,该邮件向收件人提供一个链接,指导用户返回网站的相应部分.我显然希望摆脱硬编码,因为它不适用于不同的部署,如果我开始更改路由,这个链接将被破坏.有没有更好的方法来做到这一点?

asp.net-mvc asp.net-mvc-routing urlhelper asp.net-mvc-4 asp.net-web-api

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

什么是ASP.NET MVC中的WebApi [FromUri]等价物?

在WebApi中,我可以在控制器动作上装饰一个参数,[FromUri]以便将URI的组件'反序列化'(如果愿意的话)放入POCO模型中; 又称模型绑定.

尽管从2.0开始使用MVC,我从未将它用于网站(不知道为什么).它与ASP.NET MVC 5中的相同之处是什么?

除非我需要引用库,否则IDE中似乎无法识别该属性.

我想~/thing/2014/9绑定到下面的模型:

public class WhateverModel
{
    public int Year { get; set; }
    public int Month { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

更新

在另一个问题(上面的链接)中,OP说:

但是,将其切换为普通MVC而不是WebApi,并且默认模型绑定器会崩溃,并且无法绑定嵌套数组中对象的属性

这意味着他正在使用WebApi中的属性.我猜.我没有这些引用,因为我在MVC中,所以(ab)使用WebApi的版本是否可以在MVC中执行此操作?

更新2

在这个问题的答案是:

您需要构建关于MVC模型绑定器命名约定的查询字符串.

此外[FromUri],示例操作中的属性完全被忽略,因为MVC DefaultModelBinder不知道它

因此,如果他在错误的属性上取得了一些成功,那么我仍然不知道OP在该问题上该做什么或在地球上做什么.

我想我希望得到一个明确的答案,而不是那个问题的泥泞.

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

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

ASP.NET MVC - MapRoute与routes.Add(和404s)

我刚刚开始使用ASP.NET MVC.

MapRoute和routes.Add有什么区别?我应该只使用MapRoute吗?我可以映射多条路线吗?哪个"地图"优先...那些你先打电话或最后打电话?

我希望能够为StackOverflow做类似的事情.但我希望URL符合这种模式:
"User/{domain}/{username}"将路由到UserController

以及执行典型ASP.NET MVC路由的所有其他请求.例如:

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

更新:
使用URL时:http:// localhost:3962/User/MYDOMAIN/BTYNDALL
我收到错误:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,其名称已更改,或暂时不可用.

这是我正在使用的代码:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "User",                                                     
            "User/{domain}/{username}",                           
            new { controller = "User", action = "Index" }      
        );

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Home", action = "Index", id = "" }  
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    } …
Run Code Online (Sandbox Code Playgroud)

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

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

当url包含编码的&符号时,MVC WEB API路由失败

当我打电话给我的webservice时,我会得到两个参数:

从客户端(&)检测到潜在危险的Request.Path值.

Routeconfig:

config.Routes.MapHttpRoute(
name: "PropertiesSearch",
routeTemplate: "api/property/Search/{category}/{query}",
defaults: new { controller = "Property", action = "Search", category = "common", query = string.Empty }
);
Run Code Online (Sandbox Code Playgroud)

Controllermethod:

[HttpGet]
public SearchResult Search(string category, string query)
{
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给api时:

/ API /属性/搜索/家庭/ areaID表示%3D20339%26areaId%3D20015

从客户端(&)检测到潜在危险的Request.Path值.

这样做:

/ API /属性/搜索/家庭/?查询= areaID表示%3D20339%26areaId%3D20015

工作良好.

如何解决路由解码问题?

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

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

在ASP.NET 5(vNext)MVC 6中添加自定义IRouter

我正在尝试将此示例RouteBase实现转换为与MVC 6一起使用.我已经通过遵循路由项目中的示例来解决大部分问题,但是我正在了解如何Task从方法返回异步.我真的不在乎它是否实际上是异步的(为任何可以提供答案的人欢呼),现在我只想让它运转起来.

我有传出的路线功能(ActionLink当我输入路线值时,意味着工作正常).问题在于RouteAsync方法.

public Task RouteAsync(RouteContext context)
{
    var requestPath = context.HttpContext.Request.Path.Value;

    if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == '/')
    {
        // Trim the leading slash
        requestPath = requestPath.Substring(1);
    }

    // Get the page that matches.
    var page = GetPageList()
        .Where(x => x.VirtualPath.Equals(requestPath))
        .FirstOrDefault();

    // If we got back a null value set, that means the URI did not match
    if (page != null)
    {
        var routeData = new RouteData();

        // This …
Run Code Online (Sandbox Code Playgroud)

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

20
推荐指数
1
解决办法
6087
查看次数

ASP.NET MVC 2应用程序中的区域可以映射到子域吗?

有没有办法将ASP.NET MVC 2应用程序中的区域映射到子域,例如

movies.example.com/Theater/View/2

代替

example.com/Movies/Theater/View/2

其中{area ="Movies",controller ="Theatre",action ="View",id = 2}.

asp.net subdomain asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas

19
推荐指数
2
解决办法
5127
查看次数

asp.net mvc多语言网址/路由

这是关于asp.net mvc多语言网址/路由和SEO最佳实践/好处的两部分问题...

问题第1部分)

我被要求创建一个新的ASP.NET MVC网站,它将支持最少(最初)两种语言(英语和法语),将来可能会有3种语言...

至于本地化应用程序(标签,jQuery错误等),使用资源文件应该没问题,我已经找到了很多这方面的例子......但我的关注/问题更多的是关于URL.

在SEO方面,这两种方式之间的推荐方法是什么?

Fashion 1 (no culture folder)  
www.mydomain.com/create-account 
www.mydomain.com/creer-un-compte

Fashion 2 (with built in culture folder)
www.mydomain.com/create-account 
www.mydomain.com/fr/creer-un-compte <--notice the “fr” folder 
Run Code Online (Sandbox Code Playgroud)

使用一个而不是另一个已知的问题/惩罚?

或者它是如此之小,以至于变得无关紧要!


问题第2部分)

为了实现Fashion 2,我已经在这里找到了一篇文章: ASP.NET MVC - 本地化路线

但我很想知道如何实现时尚1.

有没有人有任何链接?

另外,据我所知,URL重写不是我想要的,因为我不想"重定向"用户...我只是希望用适当的语言显示网址,而不必在网址

在此先感谢您的帮助!

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

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

HTTP错误403.14 - 禁止使用 - 带有IIS Express的MVC 4

这似乎是一个已被多次询问/回答的问题.不是.

开发环境: VS 2012和MVC 4.我使用内置的IIS Express来运行应用程序.

这个错误直到昨天才发生.它突然开始发生,我被卡住了.奇怪的是它只发生在一个场景中.

当我尝试访问时http://localhost:49962/managescholars/,它会显示错误

HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.
Run Code Online (Sandbox Code Playgroud)

但使用http://localhost:49962/managescholars/Index工作正常.同一控制器的其他动作方法也可以正常工作.如http://localhost:49962/managescholars/create.所有其他控制器也可以正常工作.

我尝试将以下内容添加到web.config中.

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
  <handlers/>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

我也试过以管理员身份运行以下命令

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
Run Code Online (Sandbox Code Playgroud)

但它们都没有奏效.

编辑:

我修改了我的路线.他们看起来如下.

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

        routes.MapRoute(
            name: "ManageScholarLectures",
            url: "Manage/Lectures/{userFriendlyName}",
            defaults: new { controller = MVC.ManageLectures.Name , 
                            action = MVC.ManageLectures.ActionNames.Index, 
                            userFriendlyName = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "ManageScholarEdit",
            url: "Manage/Scholars/{userFriendlyName}", …
Run Code Online (Sandbox Code Playgroud)

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

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