#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);
}
Комментарии:
1. Я добавил то, что, по моему мнению, могло бы сработать, но страница отображается как не найденная. Моя цель — предоставить анонимному пользователю доступ к этой важной домашней странице организации. Есть идеи?
2. Вы можете использовать nuget.org/packages/routedebugger чтобы проверить, какие маршруты будут затронуты.