1
0
mirror of https://github.com/rudollee/LearningMVC.git synced 2025-06-06 15:36:11 +00:00

Ch. 16 Routing Adv (until 16-21)

This commit is contained in:
wook 2017-04-13 01:43:57 +09:00
parent 2fea7ffb5e
commit 59e0ccf99b
8 changed files with 130 additions and 9 deletions

View File

@ -5,6 +5,7 @@ using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Mvc.Routing.Constraints;
using UrlsAndRoutes.Infrastructure;
namespace UrlsAndRoutes
{
@ -71,10 +72,16 @@ namespace UrlsAndRoutes
routes.MapMvcAttributeRoutes();
routes.MapRoute("NewRoute", "App/Do{action}", new { controller = "Home" });
//routes.MapRoute("NewRoute", "App/Do{action}", new { controller = "Home" });
//routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
// new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.Add(new LegacyRoute("~/articles/Windows_3.1_Overview.html", "~/old/.NET_1.0_Class_Library"));
routes.MapRoute("MyRoute", "{controller}/{action}");
routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" });
routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
}
}

View File

@ -17,10 +17,16 @@ namespace UrlsAndRoutes.Controllers
return View("ActionName");
}
[Route("Add/{user}/{id:int}")]
//[Route("Add/{user}/{id:int}")]
//public string Create(string user, int id)
//{
// return string.Format("User: {0}, ID: {1}", user, id);
//}
[Route("Add/{user}/{id:int}", Name = "AddRoute")]
public string Create(string user, int id)
{
return string.Format("User: {0}, ID: {1}", user, id);
return string.Format("Create Method - User: {0}, ID: {1}", user, id);
}
[Route("Add/{user}/{password:alpha:length(6)}")]

View File

@ -22,5 +22,23 @@ namespace UrlsAndRoutes.Controllers
ViewBag.CustomVariable = id; // ?? "<no value>"; // id; // RouteData.Values["id"];
return View();
}
//public ViewResult MyActionMethod()
//{
// string myActionUrl = Url.Action("Index", new { id = "MyID" });
// string myRouteUrl = Url.RouteUrl(new { controller = "Home", action = "Index" });
// return View();
//}
//public RedirectToRouteResult MyActionMethod()
//{
// return RedirectToAction("Index");
//}
public RedirectToRouteResult MyActionMethod()
{
return RedirectToRoute(new { controller = "Home", action = "Index", id = "MyID" });
}
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace UrlsAndRoutes.Controllers
{
public class LegacyController : Controller
{
public ActionResult GetLegacyURL(string legacyURL)
{
return View((object)legacyURL);
}
}
}

View File

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace UrlsAndRoutes.Infrastructure
{
public class LegacyRoute : RouteBase
{
private string[] urls;
public LegacyRoute(params string[] targetUrls)
{
urls = targetUrls;
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData result = null;
string requestedUrl = httpContext.Request.AppRelativeCurrentExecutionFilePath;
if (urls.Contains(requestedUrl, StringComparer.OrdinalIgnoreCase))
{
result = new RouteData(this, new MvcRouteHandler());
result.Values.Add("controller", "Legacy");
result.Values.Add("action", "GetLegacyURL");
result.Values.Add("legacyURL", requestedUrl);
}
return result;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
VirtualPathData result = null;
if (values.ContainsKey("legacyURL") && urls.Contains((string)values["legacyURL"], StringComparer.OrdinalIgnoreCase))
{
result = new VirtualPathData(this, new UrlHelper(requestContext).Content((string)values["legacyURL"]).Substring(1));
}
return result;
}
}
}

View File

@ -109,9 +109,11 @@
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\CustomerController.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\LegacyController.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Infrastructure\LegacyRoute.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
@ -119,6 +121,7 @@
<Content Include="packages.config" />
<Content Include="Views\Shared\ActionName.cshtml" />
<Content Include="Views\Home\CustomVariable.cshtml" />
<Content Include="Views\Legacy\GetLegacyURL.cshtml" />
<None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</None>

View File

@ -0,0 +1,10 @@
@model string
@{
ViewBag.Title = "GetLegacyURL";
Layout = null;
}
<h2>GetLegacyURL</h2>
The URL requested was: @Model

View File

@ -12,11 +12,25 @@
<body>
<div>The controller is: @ViewBag.Controller</div>
<div>The action is: @ViewBag.Action</div>
<div>
@Html.ActionLink("This is an outgoing URL", "CustomVariable")
</div>
<div>
@*<div>
@Html.ActionLink("This is an outgoing URL", "CustomVariable", new { id = "Hello" })
</div>*@
@*<div>
@Html.ActionLink("This targets another controller", "Index", "Customer")
</div>*@
<div>
<!-- Add Attribute-->
@* @Html.ActionLink("This is an outgoing URL", "Index", "Home", null, new { id = "myAnchorID", @class = "myCSSClass" })*@
<!-- Regular Expression-->
@*@Html.ActionLink("This is an outgoing URL", "Index", "Home", "https", "myserver.mydomain.com", "myFragmentName",
new { id = "MyId" },
new { id = "myAnchorID", @class = "myCSSClass" })*@
<!-- Show URL without html-->
This is a URL:
@*@Url.Action("Index", "Home", new { id = "MyId" })*@
@Html.ActionLink("Click me", "GetLegacyURL", new { legacyURL = "~/articls/Windows_3.1_Overview.html" })
</div>
</body>
</html>