Как использовать определяемое пользователем действие URL в asp, net mvc?

#asp.net-mvc #routing

#asp.net-mvc #маршруты

Вопрос:

Я надеюсь предоставить конечным пользователям метод, который позволит им вводить значение ‘SmallBuildingCompany’, а затем использовать это значение для создания пользовательского URL, который будет перенаправлять на информационное представление. так, например, www.app.com/SmallBuildingCompany. Кто-нибудь может указать мне на некоторую информацию, которая поможет в этом?

отредактировано 161024, моя попытка пока:

Я добавил это в RouteConfig.

         RouteTable.Routes.MapRoute(
        "Organization",
        "O/{uniqueCompanyName}",
        new { controller = "Organization", action = "Info" }
  

и добавлены новый метод контроллера и представление в контроллере организации.

 public async Task<ActionResult> Info(string uniqueCompanyName)
{
    var Org = db.Organizations.Where(u => u.uniqueCompanyName == uniqueCompanyName).FirstOrDefault();

    Organization organization = await db.Organizations.FindAsync(Org.OrgId);

    return View("Info");
}
  

Комментарии:

1. Что вы пробовали?

Ответ №1:

Вы можете достичь этого, используя SmallBuildingCompany часть URL в качестве параметра для действия, которое используется для отображения каждого информационного представления.

Настройте маршрут в Global.asax.cs, чтобы извлечь название компании в качестве параметра и передать его в индексное действие CompanyInfoController:

 protected void Application_Start() {
   // Sample URL: /SmallBuildingCompany
   RouteTable.Routes.MapRoute(
        "CompanyInfo",
        "{uniqueCompanyName}",
        new { controller = "CompanyInfo", action = "Index" }
   );
}
  

Обратите внимание, что этот маршрут, вероятно, нарушит маршрут по умолчанию ( {controller}/{action}/{id} ), поэтому, возможно, вы захотите добавить префикс к своему маршруту «Info»:

 protected void Application_Start() {
       // Sample URL: Info/SmallBuildingCompany
       RouteTable.Routes.MapRoute(
            "CompanyInfo",
            "Info/{uniqueCompanyName}",
            new { controller = "CompanyInfo", action = "Index" }
       );
    }
  

Затем индексное действие CompanyInfoController может использовать uniqueCompanyName параметр для извлечения информации из базы данных.

 public ActionResult Index(string uniqueCompanyName) {
    var company = dbContext.Companies.Single(c => c.UniqueName == uniqueCompanyName);
    var infoViewModel = new CompanyInfoViewModel {  
        UniqueName = company.UniqueName  
    }
    return View("Index", infoViewModel);
}
  

ASP.NET Маршрутизация

Комментарии:

1. Я добавил то, что, по моему мнению, могло бы сработать, но страница отображается как не найденная. Моя цель — предоставить анонимному пользователю доступ к этой важной домашней странице организации. Есть идеи?

2. Вы можете использовать nuget.org/packages/routedebugger чтобы проверить, какие маршруты будут затронуты.