标签: asp.net-mvc-routing

在 MVC 操作中隐藏查询字符串

我想将查询字符串隐藏到我的控制器的操作中。

在我的应用场景中是这样的:

1)我已在新窗口中打开新操作:

var check="Particular String"
var url = rootUrl("Home/Preview?Docs=" + check);
window.open(url, '_blank');
Run Code Online (Sandbox Code Playgroud)

2)在控制器方面,我在控制器的操作中使用了一些代码,如下所示:

 public ActionResult Preview(string Docs)
        {
            TempData["Docs"] = Docs;
            return RedirectToAction("UnInvoicedPreview");
        }
Run Code Online (Sandbox Code Playgroud)

我的查询::1)打开新窗口时,它在开头显示查询字符串(直到它不重定向到另一个操作时)。

2) 我不想在 URL 中显示 QueryString。

3)有什么方法可以隐藏查询字符串或者我们可以加密它吗?

c# asp.net-mvc jquery asp.net-mvc-routing query-string

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

同时通过 Web API 和 MVC 使用属性路由和基于约定的路由

我有一个使用基于约定的路由的 Asp.net MVC Web 应用程序。我最近添加了一些 Web Api 2 控制器,为此我使用了属性路由。尽管文档声称您可以同时使用两者,但我可以使用(属性路由)API 方法,也可以使用(约定路由)Web 应用程序方法。

这是 RouteConfig.RegisterRoutes():

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

        //routes.MapMvcAttributeRoutes();

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

这是WebApiConfig.Register():

    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
        // To avoid processing unexpected …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-routing asp.net-web-api-routing asp.net-mvc-5 asp.net-web-api2

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

使用 ASP.NET MVC 5 登录后重定向到 Angular 路由

我正在使用 asp.net mvc 5 应用程序日志记录,并在 AccountController 中执行以下日志操作:

    // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {

          ## not working, just a trial
        ##returnUrl = "Dashboard#!/requests";

        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change >to shouldLockout: true

        var result = await > >SignInManager.PasswordSignInAsync(model.UserName, model.Password,
Run Code Online (Sandbox Code Playgroud)

model.RememberMe, shouldLockout: false);

        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-routing angularjs angularjs-routing asp.net-mvc-5

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

如何创建 MVC 路由来拦截经典 ASP URL?

我的问题在前面

如何构造一个路由,以便 MVC 拦截经典 ASP URL 并执行 MVC 操作?

我正在将旧版经典 ASP 应用程序迁移到 MVC,并且需要让 MVC 拦截几个旧版 ASP URL,因为它们是对应用程序进行外部访问的主要端点。但我似乎不知道如何正确地做到这一点。

我检查了其他几个问题,但没有找到我要找的东西,但也许我今天的搜索能力很差。这个是特定于区域的,但看起来与我的类似,但仍然不起作用,是一种可能的解决方法,但我真的宁愿在 MVC 中完全处理这个问题并完全消除遗留文件。

我想做的事

给定:/foo/bar.asp

映射到:/InboundLinks/HandleBar

(一个 URL 将是 GET 请求,但另一个 URL 将是包含一些敏感数据的 POST,因此我需要拦截它们,并且 POST 数据仍然可用于 MVC,不确定 301 重定向是否会执行此操作)

我不想做什么

我根本不想运行经典的 ASP 页面。(如果这是唯一的解决方法,我愿意让它仅执行 301 重定向到 MVC URL,但仅此而已)我希望 MVC 拦截并处理 URL。我这么说是因为我在这里和其他地方发现的一些问题似乎在这一点上产生了一些混乱。

我已经尝试过的

routes.MapRoute(
    name: "LegacyBarUrl",
    url:  "foo/bar.asp",
    defaults: new { controller = "InboundLinks", action = "HandleBar" }
);
Run Code Online (Sandbox Code Playgroud)

但这会返回404 Not Found错误。

环境

Visual Studio 2013 在 Windows 7 …

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

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

ASP.Net MVC 路由捕获所有 *.aspx 请求

一定是以前被问过的,但是在阅读了这里这里这里这里之后,我无法推断相关部分以使其工作。我正在将一个旧的 Web 表单网站改造成 MVC,并希望捕获特定的传入 HTTP 请求,以便我可以发出RedirectPermanent(以保护我们的 Google 排名并避免用户因 404 问题而离开)。

我不需要拦截所有传入请求或解析某些id值,而是需要拦截以.aspx文件扩展名结尾(或包含)的所有请求,例如

www.sample.com/default.aspx
www.sample.com/somedir/file.aspx
www.sample.com/somedir/file.aspx?foo=bar
Run Code Online (Sandbox Code Playgroud)

对 MVC 路由的请求应被忽略(只是正常处理)。

这是我到目前为止所拥有的,除了ASPXFiles路线从未被击中。

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

        // never generates a match
        routes.MapRoute(
            name: "ASPXFiles",
            url: "*.aspx",
            defaults: new { controller = "ASPXFiles", action = "Index" }
        );

        // Used to process all other requests (works fine)
        routes.MapRoute( …
Run Code Online (Sandbox Code Playgroud)

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

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

ASP.Net Core 中的动态路由

我需要提供一个路由机制,其中路由是在运行时从用户帐户创建生成的。例如http://mysite/username/home

我认为这可以通过路由来完成,但我不确定从哪里开始使用 ASP.Net Core。我在网上看到了一些 MVC 5 的示例,但 ASP.Net Core 处理路由的方式似乎有点不同。如何确保网站不会混淆http://mysite/username/news用户自定义登录页面和http://mysite/news网站新闻页面?

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

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

Angular ui 路由器转换回之前的状态

我遇到一个问题,在某种情况下状态转换会发生两次。我有一个包含多个 SPA 的应用程序。我使用 MVC 路由来服务每个 SPA,并在每个 SPA 中使用 Angular ui 路由器来处理路由。

下图显示了下拉列表,其中下拉列表中的每个项目都是指向不同 SPA 的链接

包含不同 SPA 链接的下拉菜单

下图显示了单击 SPA 链接时显示的选项卡。

每个 SPA 的选项卡

我遇到的问题特定于以下步骤。

  1. 加载 SPA。这将带您进入第一个选项卡。
  2. 单击任何其他选项卡,您将进入该选项卡特定的视图。
  3. 从下拉菜单中单击指向同一 SPA 的链接。这将带您返回第一个选项卡。
  4. 尝试单击任何其他选项卡。这就是问题发生的地方。ui-router 将转换到我们刚刚单击的选项卡所代表的状态,但是,它会立即带我回到第一个选项卡。

以下是相关代码片段。

路线:

angular.module('settings').config(routeConfig);

routeConfig.$inject = ["$stateProvider", "$urlRouterProvider"];
function routeConfig($stateProvider, $urlRouterProvider) {

    // default route
    $urlRouterProvider.when('', 'Tab1');

    $stateProvider.state('Tab1',
    {
        url: '/Tab1',
        templateUrl: '/link/To/template.html',
        controller: 'tab1controller as ctrl'
    });

    $stateProvider.state('Tab2',
    {
        url: '/Tab2',
        templateUrl: '/link/To/template.html',
        controller: 'tab2controller as ctrl'
    });
    $stateProvider.state('Tab3',
    {
        url: '/Tab3',
        templateUrl: '/link/To/template.html',
        controller: 'tab3controller as ctrl'
    });
Run Code Online (Sandbox Code Playgroud)

标签 HTML:

<li role="presentation"><a role="tab" …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-routing angularjs angular-ui-router

5
推荐指数
0
解决办法
931
查看次数

URL 中的变量带有斜杠,它是 URL 编码的,但 IIS 仍然可以看到斜杠?

我有一个控制器,其方法有一个在路由中传递的变量 - 控制器:

\n\n
[Route("cont/{MyParameter}")]\npublic ActionResult Index(string MyParameter)\n{\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我像这样在 URL 中传递一个值 (abcdef) 时,就可以了:

\n\n
http://localhost/my-website/cont/abcdef\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我传递带有编码斜杠的一个时,它失败了,就好像斜杠没有编码一样,例如:

\n\n
http://localhost/my-website/cont/abc%2fdef\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在 IIS 中收到“无法找到资源”的消息 - 请求的 URL 显示在以下内容中:

\n\n
Requested URL\n\xc2\xa0\xc2\xa0\xc2\xa0http://localhost:80/f-website/cont/abc/def\n
Run Code Online (Sandbox Code Playgroud)\n\n

它似乎添加了斜杠 - 尽管它们已被编码。

\n\n

但地址栏仍然显示原始 URL,其中包含 %2f。

\n\n

如何将 / 作为参数传入?我认为 URL 编码是这里的解决方案,但它显然没有效果。

\n\n

我在谷歌上找不到任何关于这个具体问题的信息。

\n

c# asp.net-mvc-routing

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

使用查询字符串数组重定向到操作

我正在尝试使用查询字符串数组重定向到操作:

string[] variantIds = new { 
  "test1",
  "test2",
};

return RedirectToAction("SamplesOrderStep3", new { variantIds });
Run Code Online (Sandbox Code Playgroud)

但这会重定向到

sample-order-step3?variantIds=System.String%5B%5D
Run Code Online (Sandbox Code Playgroud)

我如何让它去

sample-order-step3?variantIds=test1&variantIds=test2
Run Code Online (Sandbox Code Playgroud)

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

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

在ASP.NET MVC中动态生成许多路由......这是一个非常糟糕的主意吗?

这是我的困境.我有一组实体,我想用它们来定义一组路线的起点.例如,我想为我的网站中的所有用户提供mydomain.com/username形式的自己的"子网站",然后挂起所有UserController操作.

这是我正在做的一个粗略的例子:

我有一个"UserController",有"Index","Profile"和"Bio"等动作方法.

public ActionResult Profile( int UserID )
{
    User u = User.SingleOrDefault(u => u.UserID == UserID);
    return View(u);
}
Run Code Online (Sandbox Code Playgroud)

在RegisterRoutes()方法中,我这样做:

foreach (User user in User.Find(u => u.Active == true))
{
    routes.MapRoute(
         "",
         user.UserName + "/{action}",
         new { controller="User", action="Index", UserID=user.UserID }
     );
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,它完全按照我的要求运行:

domain.com/[username]/Profile
domain.com/[username]/Bio
Run Code Online (Sandbox Code Playgroud)

现在是有效的工作路由,他们可以将UserID作为控制器中的方法参数,因为每个用户都有自己的路由.此外,默认路由仍然有效.好极了.

我的问题是,这是疯了吗?我正在路由表中为系统中的每个用户创建一个条目.有多少条路线太多了?如果有超过10个用户,这会杀死我的服务器吗?50?1000?

如果这疯了,我怎么可能实现这个目标?

提前致谢.我期待着蜂巢的一些意见.

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

4
推荐指数
1
解决办法
1552
查看次数