У меня есть веб-приложение, которое мне нужно для маршрутизации URL-адреса, например: http://example.com/1234567890 к стандартному контроллеру «Home» и действию «Index» (/Home/Index).

Я только что поместил другой MapRoute в модуль RouteConfig? -- что-то типа:

    routes.MapRoute(
        name:="Clients",
        url:="{tendigits:int}",
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
    )

Очевидно, что вышеизложенное не работает, отсюда и причина моего вопроса. Заранее спасибо! (ВБ.NET 4.6)

РЕДАКТИРОВАТЬ:

Я получаю 404 с вышеуказанным. Такие изменения, как следующие STILL отображают 404:

        routes.MapRoute(
        name:="Clients",
        url:="{controller}/{action}/{id}",
        defaults:=New With {.controller = "Home", .action = "Index", .id = "\d(10)"}
    )

РЕДАКТИРОВАНИЕ №2 Это весь код файла Route.Config:

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.Mvc
Imports System.Web.Routing

Public Module RouteConfig
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

    routes.MapMvcAttributeRoutes    'added

    routes.MapRoute(
        name:="Clients",
        url:="{tendigits}",
        defaults:=New With {.controller = "Home", .action = "Index"},
        constraints:=New With {.tendigits = "\\d{10}"}
    )

    routes.MapRoute(
        name:="Default",
        url:="{controller}/{action}/{id}",
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
    )

End Sub
End Module
0
HumbleBeginnings 7 Авг 2015 в 02:08

2 ответа

Просто замените строку url:="{tendigits:int}" на url:="{id}", все остальное выглядит нормально.

0
Sandip Patel 7 Авг 2015 в 06:18
Спасибо @Sandip Patel за ваш ответ. Я пробовал это с ограничителем :int и без него (что мне нужно сделать), но это не сработало - по крайней мере, не с локальным хостом, но я не думаю, что это имеет значение. Любые другие идеи?
 – 
HumbleBeginnings
7 Авг 2015 в 06:32
@HumbleBeginnings, попробуйте код ниже routes.MapRoute( name: "Clients", url: "{tendigits}", defaults: new { controller = "Home", action = "Index" }, constraints: new { tendigits = "\\d{10}" } ); Он должен передать 10 цифр, иначе выдаст 404
 – 
Sandip Patel
7 Авг 2015 в 08:53
Неудачно. вот мой эквивалент VB - я что-то упустил? routes.MapRoute( name:="Clients", url:="{tendigits}", defaults:=New With {.controller = "Home", .action = "Index"}, constraints:=New With {.tendigits = "\\d{10}"} ) Я думал, что нужен только один "\", но, возможно, я ошибаюсь...
 – 
HumbleBeginnings
7 Авг 2015 в 11:45
Я ставлю его выше значения по умолчанию, которое считаю правильным. Обычная обработка проходит по этому новому маршруту должным образом, но я все еще получаю 404 на 10 цифрах.
 – 
HumbleBeginnings
7 Авг 2015 в 11:49
Вы правы, это не работает в vb.net. но как-то работает на С#. У меня есть альтернативный план на этот счет. Комментарий route="Clients" из RouteConfig. И добавьте атрибут маршрута в действие в контроллере, как показано ниже. Я протестировал его в проекте vb, и он отлично работает. <Route("{tendigits:regex(^\d{10}$)}")> Function Index(ByVal tendigits As Integer) As ActionResult Return View() End Function
 – 
Sandip Patel
7 Авг 2015 в 13:38

По прихоти я решил попробовать другой синтаксис, который оказался успешным (по крайней мере, на данный момент):

    routes.MapRoute(
        name:="Clients",
        url:="{tendigits}",
        defaults:=New With {.controller = "Home", .action = "Index", .tendigits = ""},
        constraints:=New With {.tendigits = "\d{10}"}
    )

Если кто-то видит что-то не так с этим подходом, который я могу упустить, сообщите, пожалуйста.

0
HumbleBeginnings 7 Авг 2015 в 19:23