我们旧的ASP.net站点将静态映像存储在名为/ images的根目录下的子目录中.
我们新的ASP.net MVC站点将这些图像存储在/ Content/Images的新布局中
我已经更改了网站中的所有页面以应对新的文件夹结构,但我想将旧的静态图像设置为永久重定向到新位置.
我们的网站是托管的,我无法控制IIS,那么解决这个问题的最佳方法是什么?
有没有什么好方法可以为多语言Web应用程序创建路由重写?
URL架构应如下所示
http://<Domainname>/{Language}/{Controller}/{Action}/{Id}
但是也应该支持没有语言部分的URL,但它们不应该直接映射到控制器,而是生成重定向响应.
这里重要的是,重定向不应该硬编码为特定语言,而是根据用户首选语言等因素确定.
注意:确定正确语言的过程不是问题,只是如何进行非静态重写.
谢谢
multilingual internationalization asp.net-mvc-routing asp.net-mvc-3
我想创建一个IRouteConstraint,它根据枚举的可能值过滤值.我试图为自己谷歌,但这并没有导致任何结果.
有任何想法吗?
这是我的默认路线:
routes.MapRouteLowercase(
"Default",
"{country}/{controller}/{action}/{id}",
new {
country = "uk",
controller = "Home",
action = "Index",
id = UrlParameter.Optional
},
new[] { "Presentation.Controllers" }
);
Run Code Online (Sandbox Code Playgroud)
众所周知,当有人访问www.domain.com/时,MVC的路由将确定默认控制器和基于上述路由执行的操作,但URL将保持不变.对于使用默认值的每条路线,是否有内置或优雅的方式从www.domain.com/执行301重定向到www.domain.com/uk/{controller}/{action}/?
我正在使用ASP.NET MVC 4,.NET 4.5.除了为每个"动作"创建单独的控制器之外,还有什么方法可以拥有"无控制器"的URL?
我的意思是,让一个家庭控制器充满行动.网址如:
成为
但仍然使用家庭控制器.
我正在使用mvc5在Azure上开发一个网站.我使用属性路由,在控制器上使用路由和路由前缀.我用action.link助手打电话.我没有说出我的路线.
我在route.config上做了以下事情:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.LowercaseUrls = true;
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我的控制器就像:
[OutputCache(Duration = 600, Location = System.Web.UI.OutputCacheLocation.Client)]
[RoutePrefix("istanbul/kadikoy")]
[Route("{action=index}")]
public class KadikoyController : Controller
{
public ActionResult Index()
{
return View();
}
[Route("kadikoy-tarihi")]
public ActionResult KadikoyTarihi()
Run Code Online (Sandbox Code Playgroud)
我的服务器响应时间非常差,即9.6秒
如果我注释掉属性路由代码,使用默认路由,我有2.1秒的服务器响应时间.
谢谢您的回复.
c# routes asp.net-mvc-routing attributerouting asp.net-mvc-5
我想为管理/身份验证的控制器和视图中的公共/匿名控制器和视图提供一些URL分隔.所以我最终完全使用属性路由,以便更好地控制我的URL.我希望我的公共URL以"〜/ Admin/etc"开头.而我的公共网址没有任何这样的前缀.
[RoutePrefix("Home")]
public class HomeController : Controller
{
[Route("Index")]
public ActionResult Index()
{ //etc. }
}
Run Code Online (Sandbox Code Playgroud)
[RoutePrefix("Admin/People")]
public class PeopleController : Controller
{
[Route("Index")]
public ActionResult Index()
{ //etc. }
}
Run Code Online (Sandbox Code Playgroud)
这允许我拥有公共URL,例如:
http://myapp/home/someaction
Run Code Online (Sandbox Code Playgroud)
...以及admin/authenticated URL,例如:
http://myapp/admin/people/someaction
Run Code Online (Sandbox Code Playgroud)
但是现在我想根据用户是在网站的"管理"部分还是"公共"部分,在视图中做一些动态的东西.如何正确地以编程方式访问?
我知道我可以做点什么
if (Request.Url.LocalPath.StartsWith("/Admin"))
Run Code Online (Sandbox Code Playgroud)
......但感觉"很丑".我知道我可以通过访问控制器和动作名称
HttpContext.Current.Request.RequestContext.RouteData.Values
Run Code Online (Sandbox Code Playgroud)
...但是"admin"部分没有反映在那里,因为它只是一个路由前缀,而不是一个实际的控制器名称.
所以,基本的问题是,如何以编程方式确定当前加载的视图是否在"admin"部分下?
c# asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5
我正在尝试学习新的MVC 6.我之前从未使用过Microsoft MVC框架.我试图通过使用控制器的URL(urlhelper)添加指向控制器的不同操作的链接来增强简单的教程Web API(主控制器显示API可以执行的操作).但是当我使用时:
this.Url.Action("Get", new {id = id});
Run Code Online (Sandbox Code Playgroud)
我得到一个带URL的查询字符串.我想要一个更安静的URL.
我想在使用属性路由时,我不必映射特定的路由,就像我在WebApi的旧教程中看到的那样.
我必须映射路线吗?为了获得更加宁静的URL样式,我该怎么做?
我刚开始在Web应用程序中进行路由,并且阅读了许多关于什么是路由以及如何RouteConfig.cs在控制器中编写或使用属性路由的教程,但很少有教程真正显示如何处理整个应用程序。
像大多数Asp.NET Mvc应用程序一样,在脚手架上放置控制器时,您可以创建,编辑,删除方法,并且总是GET一对一POST。
但是,如何处理这些方法上的路由?
假设这些是我的Edit方法,那么在post方法上放置什么路由呢?当我单击“保存”按钮时,是否需要“修复”其他任何东西才能使路由正常工作?
// GET: VehicleModels/Edit/5
[Route("Aanbod/Edit/{id:int}")]
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
VehicleModels vehicleModels = db.VehicleModels
.Include(v => v.Options)
.Include(v => v.Fotos)
.SingleOrDefault(v => v.Id == id);
if (vehicleModels == null)
{
return HttpNotFound();
}
return View(vehicleModels);
}
// POST: VehicleModels/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int? id, IEnumerable<HttpPostedFileBase> uploads)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var VehicleToUpdate = db.VehicleModels.Find(id); …Run Code Online (Sandbox Code Playgroud) 链接到项目 - > https://github.com/crumdev/hqbbq.git
我有一个简单的3页MVC网站,有1个控制器.对于联系页面,我有一个小的3输入表单.以下是Controller方法:
[Route("contact/")]
public IActionResult Contact()
{
return View();
}
[HttpPost]
public IActionResult Contact(string name, string email, string message)
{
ViewBag.Name = name;
ViewBag.Email = email;
ViewBag.Message = message;
return View();
}
Run Code Online (Sandbox Code Playgroud)
当我在HttpPost的Contact方法中提交带有断点的表单时,它永远不会中断,而是使用常规方法并再次返回视图.我已经尝试将我的表单简化为name字段,只捕获它并且它不会进入POST方法.我给了常规的Contact方法[HttpGet]属性,所以它只能严格用于GET请求,当我提交表单时,它会完全绕过我的控制器并返回除了"Hello World!"之外的空白的异常页面.屏幕上.我已经阅读了文档,并在teamtreehouse.com上阅读了常规ASP.Net的教程,但是无法理解为什么它会以这种方式运行.
编辑:这是提交POST的页面的代码.我只是使用一个纯HTML表单和POST方法来提交数据.
https://github.com/crumdev/hqbbq/blob/master/HQ-BBQ/Views/Home/contact.cshtml
asp.net-mvc ×5
c# ×4
routing ×2
asp.net ×1
controller ×1
http-post ×1
multilingual ×1
routes ×1
url ×1
url-routing ×1