我已经开始将我的简单网站转换为ASP.NET MVC,只是为了搞乱它.我有一个切换语言功能,基本上将Session ["language"]设置为另一种语言并刷新页面.如果可以做得更好,请纠正我,但我为此制作了两个控制器并在那里设置会话.问题是最后的路由.我可以用一些简洁的方式刷新页面,还是可以获取当前的Action并将其重新路由到该页面?或者这更像是Ajax的场景?
感谢您的建议!
在我的网页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)
哦,还有另外一件事,你可以制作所需的参数,而不是可选的....如果是这样,怎么样?
我习惯使用类似于下面的内容生成到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
在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在该问题上该做什么或在地球上做什么.
我想我希望得到一个明确的答案,而不是那个问题的泥泞.
我刚刚开始使用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) 当我打电话给我的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
工作良好.
如何解决路由解码问题?
我正在尝试将此示例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
有没有办法将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
这是关于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重写不是我想要的,因为我不想"重定向"用户...我只是希望用适当的语言显示网址,而不必在网址
在此先感谢您的帮助!
这似乎是一个已被多次询问/回答的问题.不是.
开发环境: 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) asp.net-mvc ×10
c# ×5
.net ×2
asp.net ×1
asp.net-core ×1
rest ×1
subdomain ×1
url-routing ×1
urlhelper ×1