我用MVC4 扩展了个ActionResult返回的是XML
我想把URL的路径写成
data/2007-06/feda.xml
写死是这样的
对应的Controller是 Test
Action 是 Index
routes.MapRoute(
name: "Xml",
url: "data/2007-06/feda.xml",
defaults: new { controller = "Test", action = "Index", id = UrlParameter.Optional
定义了一个这样的路由
为什么它还是会直接去访问文件夹下的xml
怎么让这个URL匹配这个路由
试试我这个方法,不知道是不是你想要的
routes.MapRoute(
name: "Xml",
url: "data/{filePath}/{fileName}",
defaults: new { controller = "Test", action = "Index", filePath = "2007-06", fileName = "feda.xml" }
);
Action 的 Index 方法上 定义两个参数
public ActionResult Index(string filePath, string fileName)
{
//把参数的值 进行的拼接一下,得到想要的地址
}
不对的呀,它会直接找feda.xml这个文件去,而不匹配路由的
可以在RouteConfig中加入下面的设置为true 是忽略现有物理文件的存在
RouteTable.Routes.RouteExistingFiles = true;
这样所有的物理文件都被忽略也不好。
一种是按上面的设置好,再设置不需要注册路由的文件,如.css文件
routes.IgnoreRoute("*{filename}.css");
一种是把你真实的xml路径设置成虚的再通过参数来拼接真实的地址
routes.MapRoute(
name: "Xml",
url: "XML/{filePath}/{fileName}",
defaults: new { controller = "Test", action = "Index", filePath = "2007-06", fileName = "feda.xml" }
);
Action 的 Index 方法上 定义两个参数
public ActionResult Index(string filePath, string fileName)
{
string fullPath = string.Format("data/{0}/{1}", filePath, fileName);
}
用xml/2007-06/feda.xml这样来访问
@林利振:
routes.RouteExistingFiles = true;
routes.IgnoreRoute("*{filename}.xml");
routes.MapRoute("XML", "FederationMetadata/2007-06/FederationMetadata.xml", new { controller = "Service", action = "Index" });
后台
public class ServiceController : Controller {
public XMLResult Index() {
var config = new CustomSecurityTokenServiceConfiguration().GetFederationMetadata(); return new XMLResult(config, config.GetType()); }
}
访问路径
http://localhost:3876/FederationMetadata/2007-06/FederationMetadata.xml
还是不匹配路由规则
@林利振:
routes.MapRoute(
name: "XmlTwo",
url: "FederationMetadata/{filePath}/{fileName}",
defaults: new { controller = "Service", action = "Index", filePath = "2007-06", fileName = "FederationMetadata.xml" }
);
后台
public class ServiceController : Controller {
public XMLResult Index(string filePath, string fileName) { var config = new CustomSecurityTokenServiceConfiguration().GetFederationMetadata(); return new XMLResult(config, config.GetType()); }
}
还是不行啊
@挨踢新手: 你做SSO的吧,你上面的访问地址是由LocalSTS来访问,不需要客户程序匹配这条路由规则吧! 我对WIF不了解...
@林利振:
这个应该不用必须是LocalStS来访问
只需要这个路径可以访问,里面的XML数据是正确的就行了
问题是现在这个路径都访问不通
@挨踢新手: FederationMetadata目录是自动生成的,没包括到项目当中吧!
我建个项目查看Web.config的配置
<add key="ida:FederationMetadataLocation" value="http://localhost:12528/wsFederationSTS/FederationMetadata/2007-06/FederationMetadata.xml" /> <add key="ida:Issuer" value="http://localhost:12528/wsFederationSTS/Issue" /> <add key="ida:ProviderSelection" value="localSTS" />
上的地址也不是你这样访问的
@林利振:
FederationMeatda是可以以服务方式暴露出来的,我用WCF方式暴露出来的是可以的,
WCF方式用的ReWrite方式重定向的URL
但是在Mvc中不知道怎么来写这个URL了,路由死活就是不认