标签: asp.net-mvc-routing

永久重定向传统路由ASP.Net MVC中的静态文件

我们旧的ASP.net站点将静态映像存储在名为/ images的根目录下的子目录中.

我们新的ASP.net MVC站点将这些图像存储在/ Content/Images的新布局中

我已经更改了网站中的所有页面以应对新的文件夹结构,但我想将旧的静态图像设置为永久重定向到新位置.

我们的网站是托管的,我无法控制IIS,那么解决这个问题的最佳方法是什么?

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

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

ASP.net MVC3多语言路由重写

有没有什么好方法可以为多语言Web应用程序创建路由重写?


URL架构应如下所示

http://<Domainname>/{Language}/{Controller}/{Action}/{Id}

但是也应该支持没有语言部分的URL,但它们不应该直接映射到控制器,而是生成重定向响应.

这里重要的是,重定向不应该硬编码为特定语言,而是根据用户首选语言等因素确定.

注意:确定正确语言的过程不是问题,只是如何进行非静态重写.

谢谢

multilingual internationalization asp.net-mvc-routing asp.net-mvc-3

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

用于枚举的IRouteConstraint

我想创建一个IRouteConstraint,它根据枚举的可能值过滤值.我试图为自己谷歌,但这并没有导致任何结果.

有任何想法吗?

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

5
推荐指数
2
解决办法
1364
查看次数

MVC重定向到默认路由

这是我的默认路线:

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}/?

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

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

可以使用ASP.NET MVC制作"无控制器"的URL吗?

我正在使用ASP.NET MVC 4,.NET 4.5.除了为每个"动作"创建单独的控制器之外,还有什么方法可以拥有"无控制器"的URL?

我的意思是,让一个家庭控制器充满行动.网址如:

  • site.com/Home/About
  • site.com/Home/Contact

成为

  • site.com/About
  • site.com/Contact

但仍然使用家庭控制器.

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

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

MVC 5属性路由的性能不佳和网站速度慢

我正在使用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

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

如何在asp.net mvc中以编程方式确定Route Prefix?

我想为管理/身份验证的控制器和视图中的公共/匿名控制器和视图提供一些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

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

使用MVC 6控制器中的urlhelper生成链接(vNext)

我正在尝试学习新的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样式,我该怎么做?

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

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

我应该如何在Mvc 5中路由POST和GET

我刚开始在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)

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

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

.net核心没有路由到POST方法

链接到项目 - > 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

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

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