标签: asp.net-mvc-routing

如何使用ASP.NET MVC路由设置RESTFul URL?

我有这个网址:

/controller/action/value

这个动作:

public ActionResult Get(string configName,string addParams)
{
}
Run Code Online (Sandbox Code Playgroud)

如何设置路由表以使路由引擎将值绑定到控制器中configName任何操作的参数Config

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

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

自定义路由ASP.NET MVC在每个控制器中设置默认操作

如何定义链接到默认操作的路由.

例如,

/Customer/acme-company

/Client/bill-johnson
Run Code Online (Sandbox Code Playgroud)

一直在寻找方法获取控制器客户端和客户.

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

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

如何防止用户访问某些内部路由?

我有一个有很多路线的网站.

一些路线,例如/sector-overview我希望用户看到的特定页面.

其他路线,例如/sectoroverview,最终呈现包括在主页上的部分的动作.

第二条路径仅仅是应用程序的内部路径,但如果用户在其地址栏中输入该路径(这是一个容易犯的错误),系统会将其视为有效请求并返回HTML部分.

可以将第二条路线重命名为类似的东西/internal-sectoroverview,但这并不能解决问题,只是隐藏它.

如果用户键入此请求,是否有任何方法可以阻止处理请求?处理这个问题的最佳方法是什么?

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

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

从根请求调用区域控制器

我的ASP.NET MVC3应用程序中有一些区域:

namespace MyProject.Areas.myarea
{
    public class myareaAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "myarea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "myarea_default",
                "myarea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个区域包含"Hello"控制器,带有"Smile"动作.

在整个项目的global.asax文件中,我有:

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

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

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
Run Code Online (Sandbox Code Playgroud)

所以,当我请求"localhost/myarea/hello/smile"时,它按预期调用适当的控制器.

但!当我请求"localhost/hello/smile"时,它会调用hello控制器STILL!有了它,它会查找不在myarea/Views文件夹中的Views,而是在〜/ …

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

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

路由,如果包含一个单词,则匹配一个特定的URL

现在我有一个匹配的地图路线

foreach(var subcat in Sports.Categories)
{
routes.MapRoute("MultiRoute" + i, subcat+"/{title}", 
new { controller = "Routing", action = "Redirect", category = subcat });
}
Run Code Online (Sandbox Code Playgroud)

我有一些体育类别:棒球,足球,篮球等,但我也想将篮球与篮球比赛,篮球集锦,十大篮球等等进行匹配。

这意味着我必须允许subcat之前和之后都具有通配符,因为BasketBall-Plays包含篮球一词,所以我希望它重定向到那里。

如何为地图路由创建包含部分?

编辑:TLDR:我有一个名为篮球的子猫,但我想匹配每个带有单词篮球的URL。所以篮球比赛/前10名应该真正打篮球/前10名

尝试过:

foreach(var subcat in Sports.Categories)
    {
    routes.MapRoute("MultiRoute" + i, subcat+"/{title}", 
    new { controller = "Routing", action = "Redirect", category = subcat }),
new{sub = ".*"+sub+".*" });
    }
Run Code Online (Sandbox Code Playgroud)

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

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

如何在混合的MVC和Web窗体上路由网页

我创建了一个混合MVC和Web窗体网站-使用更高版本的Visual Studio 2013工具非常容易。一切正常,我可以正确导航到MVC和Web窗体页面。

但是,我想做的是将所有Web表单页面都放在一个特定的子目录中,然后在不使用该子目录的情况下路由到它们。

/
 + Content
 + Controllers
 + Models
 + Scripts
 + Views
 + WebPages
    + Default.aspx
    + MyWebForm.aspx
Run Code Online (Sandbox Code Playgroud)

因此,我希望能够访问:

/WebPages/Default.aspx   as /Default.aspx or even just /
/WebPages/MyWebForm.aspx as /MyWebForm.aspx
Run Code Online (Sandbox Code Playgroud)

这可能吗?

任何意见,将不胜感激。

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

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

使用MVC 5 RouteArea属性时找不到默认区域视图

我有一个涉及多个领域的MVC5项目。我有一个默认区域(名为Default),其中有一个默认控制器(名为DefaultController)。这可以在站点路线上访问。

[RouteArea]
public class DefaultController : Controller
{
    [Route]
    public ActionResult Index()
    {
        return View("Index");
    }
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.LowercaseUrls = true;

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { "MyProject.Areas.Default.Controllers" }
    );
}
Run Code Online (Sandbox Code Playgroud)

控制器已正确加载,但是Areas/Default/Views/Default/Index.cshtml找不到视图(位于)。为什么MVC找不到正确的位置?

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations …
Run Code Online (Sandbox Code Playgroud)

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

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

ASP.NET MVC路由,404当我删除文化(语言)

我的问题:当我使用以下链接时,一切正常:

http://localhost:12816/en/Statistic/Reports
Run Code Online (Sandbox Code Playgroud)

但当我删除"/ en"时 - 我收到应用程序错误:

"'''应用程序中的服务器错误.无法找到资源."

我有几个不同语言的资源文件.当用户请求没有任何语言标识的链接时,我希望我的应用程序使用默认语言(英语).

例如,我希望这些链接完全相同:

http://localhost:12816/Statistic/Reports
http://localhost:12816/en/Statistic/Reports
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我注意到当我要求没有语言的短链接时 - 一切正常:

http://localhost:12816/Statistic/
Run Code Online (Sandbox Code Playgroud)

但是当链接更深时,我得到并且错误

我认为问题在于路由,但我是路由的新手,所以请帮助我:)

PS:我试过这样,但它不起作用:

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

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

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

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

创建到特定动作的不同路径MVC 6

我正在使用asp.net 5 mvc api,并且目前正在使用Accounts Controller。

因为我在许多不同的地方都看到在/api/TokenWeb api中有使用路由到登录名的约定。我想路由到没有帐户前缀的特定方法,我更喜欢不使用其他控制器,并且我更喜欢在Startup.cs中使用属性而不是路由,以避免将来造成混乱。

这是我目前所拥有的

[Route("api/[controller]")]
public class AccountsController : Controller
{
    [HttpPost("login")]
    public async Task<JwtToken> Token([FromBody]Credentials credentials)
    {
     ...
    }

    [HttpPost]
    public async Task CreateUser([FromBody] userDto)
    {
      ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

带有多个可选参数的asp.net mvc路由不起作用

我写了一个属性路线Route("Home/{category?}/{Subcategory?}/List")要符合下面的例子 /Home/C1/S1/List,/Home/C1/List,/Home/List

但只是为了匹配第一个url,可选参数不起作用.如何使用路由规则匹配上述三个示例?

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [Route("Home/{category?}/{subcategory?}/List")]
    public IActionResult List(Category? category = null, SubCategory? subcategory = null)
    {
        return Content(category.ToString() + "/" + subcategory.ToString());
    }

    [Route("Home/{code}/Detail")]
    public IActionResult Detail(string code)
    {
        return Content(code);
    }
}


public enum Category
{
    C1,
    C2,
    C3,
    C4
}

public enum SubCategory
{
    S1,
    S2,
    S3,
    S4
}
Run Code Online (Sandbox Code Playgroud)

类似的问题

在ASP.NET MVC 5中路由可选参数

具有一个固定动作的MVC路由和具有多个可选参数的控制器

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

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