ASP.NET MVC 5アプリケーションを作成していますが、ルーティングに問題があります。属性Route
を使用して、Webアプリケーションでルートをマップしています。次のアクションがあります。
[Route("{type}/{library}/{version}/{file?}/{renew?}")]
public ActionResult Index(EFileType type,
string library,
string version,
string file = null,
ECacheType renew = ECacheType.cache)
{
// code...
}
このURLにアクセスできるのは、次のようにurl
の最後にスラッシュ文字/
を渡す場合のみです。
type/lib/version/file/cache/
正常に動作しますが、/
なしでは動作しません。このように404
not foundエラーが表示されます
type/lib/version/file/cache
またはこれ(オプションのパラメーターなし):
type/lib/version
url
の末尾にある/
charの有無にかかわらずアクセスしたいです。最後の2つのパラメーターはオプションです。
私のRouteConfig.cs
は次のようなものです。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
どうすれば解決できますか?スラッシュ/
もオプションにしますか?
代わりに、整数として列挙型を使用する必要がありますか?
これは私がやった方法です
public enum ECacheType
{
cache=1, none=2
}
public enum EFileType
{
t1=1, t2=2
}
public class TestController
{
[Route("{type}/{library}/{version}/{file?}/{renew?}")]
public ActionResult Index2(EFileType type,
string library,
string version,
string file = null,
ECacheType renew = ECacheType.cache)
{
return View("Index");
}
}
そして、私のルーティングファイル
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// To enable route attribute in controllers
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
その後、次のように電話をかけることができます
http://localhost:52392/2/lib1/ver1/file1/1
http://localhost:52392/2/lib1/ver1/file1
http://localhost:52392/2/lib1/ver1
または
http://localhost:52392/2/lib1/ver1/file1/1/
http://localhost:52392/2/lib1/ver1/file1/
http://localhost:52392/2/lib1/ver1/
そしてそれはうまく動作します...