これよりも簡単なオプションはないとは思いますが、これを試すことができます - 経路制約を使用してください。基本的には、あなたが持っている都市のリストを知ってから、そのリスト内のエントリーとのみ一致するようにルートを制約する必要があります。
ルート制約が
public class CityConstraint : IRouteConstraint
{
public static IList<string> CityNames = (Container.ResolveShared<ICityService>()).GetCities();
bool _IsCity;
public CityConstraint(bool IsCity)
{
_IsCity = IsCity;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (_IsCity)
return CityNames.Contains(values[parameterName].ToString().ToLower());
else
return !CityNames.Contains(values[parameterName].ToString().ToLower());
}
}
を次のように実装され、その後、次のようにルートを置くことができます。
routes.MapRoute("Location", "{cityName}", new { controller = "LocationController", action = "Index" }, new { cityName = new CityConstraint(true) });
も必ず上記のルートがデフォルトルート
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional
);
前にリストされていることを確認
コントローラ名には都市名を使用できません。
これを試してみてください。あなたはまだあなたが必要な場合は
public class LocationController : Controller
{
public ActionResult Index(string city)
{
// do whatever needed; "city" param has the city specified in URL route
}
}
:
あなたが言ったように私は試みました。しかし、それは動作していません... – RameshVel
@Ramesh:それは動作していないという意味ですか?あなたはまだ元のルート定義を使用していますか?'city'という文字列パラメータを持つコントローラアクションを持っていますか?これは間違いなく機能します。あなたは間違ったことをしているに違いない。 –
@Robert Koritnik、はい私はこれと一緒に元の定義を使用していた...私はあなたの答えを探しています。問題があれば私は変わります... – RameshVel