Asp.net mvc 4 如何在包含点的ASP.NET MVC中实现自定义路由?
而不是传统的MVC路线Asp.net mvc 4 如何在包含点的ASP.NET MVC中实现自定义路由?,asp.net-mvc-4,routes,Asp.net Mvc 4,Routes,而不是传统的MVC路线 {controller}/{action}/{id} 我需要我的系统来处理这样的请求 {controller}/{action}.{id} e、 g。 http://localhost:50691/epws/openWebViewer.x551 我无法控制呼叫我的系统 我修改了我的路线图 public class RouteConfig { public static void RegisterRoutes(RouteCollection r
{controller}/{action}/{id}
我需要我的系统来处理这样的请求
{controller}/{action}.{id}
e、 g。
http://localhost:50691/epws/openWebViewer.x551
我无法控制呼叫我的系统
我修改了我的路线图
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}.{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
使用以下控制器
public class epwsController : Controller
{
public ActionResult openWebViewer(string id)
{
return View(id);
}
}
但是上面的URL只返回一个404,您可以执行如下操作,使用路由属性从URL中删除操作参数。然后扩展id参数,使字符串“openWebViewer.x551”作为一个整体进入操作内部,并在控制器内部执行一些内部路由。最后,添加web.config设置,将尾部斜杠添加到URL中,这样它就不会被静态文件处理程序处理 控制器
using System;
using System.Web.Mvc;
namespace WebApplication8.Controllers
{
[RoutePrefix("epws")]
public class EpwsController : Controller
{
[Route("{id}")]
public ActionResult Index(string id)
{
var parameters = id.Split('.');
switch (parameters[0])
{
case "openWebViewer":
return openWebViewer(parameters[1]);
default:
throw new NotImplementedException();
}
}
public ActionResult openWebViewer(string id)
{
return View(id);
}
}
}
RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Web.config
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Add trailing slash for some URLs" stopProcessing="true">
<match url="^(.*(\.).+[^\/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}/" />
</rule>
</rules>
</rewrite>
</system.webServer>
我相信这个web.config会破坏静态文件,但您可以调整regex以只匹配特定的参数名,例如openWebViewer