ASP.net MVC поддерживает для URL с дефисами

Если он установлен с помощью homebrew, попробуйте просто ввести mysql.server в терминал, и это должно быть так. AFAIK его исполняемый файл будет находиться под /usr/local/bin/mysql.server.

Если вы не можете, вы всегда можете запустить следующую команду «locate mysql.server», которая сообщит вам, где найти такой файл.

31
задан John 15 January 2010 в 01:35
поделиться

4 ответа

Я разработал решение. Внутри MvcRouteHandler requestContext содержит значения для контроллера и экшена, на которых можно сделать простую замену.

Public Class HyphenatedRouteHandler
    Inherits MvcRouteHandler

    Protected Overrides Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler
        requestContext.RouteData.Values("controller") = requestContext.RouteData.Values("controller").ToString.Replace("-", "_")
        requestContext.RouteData.Values("action") = requestContext.RouteData.Values("action").ToString.Replace("-", "_")
        Return MyBase.GetHttpHandler(requestContext)
    End Function

End Class

Тогда все, что вам нужно, это заменить route.MapRoute на эквивалентный routes.Add с указанием нового обработчика маршрутов. Это необходимо, так как MapRoute не позволяет указать пользовательский обработчик маршрута.

routes.Add(New Route("{controller}/{action}/{id}", New RouteValueDictionary(New With {.controller = "Home", .action = "Index", .id = ""}), New HyphenatedRouteHandler()))
18
ответ дан 27 November 2019 в 21:50
поделиться

В MVC 5.2.7 Вы можете просто specifiy использование атрибута

, ActionName

[ActionName("Import-Export")]
public ActionResult ImportExport()
{
    return View();
}

Тогда называет представление

Импорт-Export.cshtml

, ссылка тогда была бы:

@Html.ActionLink("Import and Export", "Import-Export", "Services")

, Который имеет форму:

@Html.ActionLink("LinkName", "ActionName", "ControllerName")
0
ответ дан 27 November 2019 в 21:50
поделиться

Не знаю о пути, не написав карту для каждого URL-адреса:

routes.MapRoute("EditDetails", "test-page/edit-details/{id}", new { controller = "test_page", action = "edit_details" });
0
ответ дан 27 November 2019 в 21:50
поделиться

Версия John's Post на C # для всех, кто ее предпочитает: Версия C # и VB в моем блоге

public class HyphenatedRouteHandler : MvcRouteHandler{
        protected override IHttpHandler  GetHttpHandler(RequestContext requestContext)
        {
            requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
            requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
            return base.GetHttpHandler(requestContext);
        }
    }

... и новый маршрут :

routes.Add(
            new Route("{controller}/{action}/{id}", 
                new RouteValueDictionary(
                    new { controller = "Default", action = "Index", id = "" }),
                    new HyphenatedRouteHandler())
        );

Вы также можете использовать следующий метод, но имейте в виду, что вам нужно будет назвать представление My-Action, что может раздражать, если вы хотите разрешить Visual Studio автоматически генерировать файлы представления.

[ActionName("My-Action")]
public ActionResult MyAction() {
    return View();
}
32
ответ дан 27 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: