首页 新闻 会员 周边

MVC XMLResult 路由

0
悬赏园豆:10 [已关闭问题] 关闭于 2016-09-21 15:20

我用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匹配这个路由

挨踢新手的主页 挨踢新手 | 初学一级 | 园豆:71
提问于:2013-07-19 16:38
< >
分享
所有回答(1)
0

试试我这个方法,不知道是不是你想要的

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)
{
//把参数的值 进行的拼接一下,得到想要的地址
}

林利振 | 园豆:206 (菜鸟二级) | 2013-07-21 11:59

不对的呀,它会直接找feda.xml这个文件去,而不匹配路由的

支持(0) 反对(0) 挨踢新手 | 园豆:71 (初学一级) | 2013-07-21 13:43
可以在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这样来访问
支持(0) 反对(0) 林利振 | 园豆:206 (菜鸟二级) | 2013-07-21 16:10

@林利振: 

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

还是不匹配路由规则

支持(0) 反对(0) 挨踢新手 | 园豆:71 (初学一级) | 2013-07-21 19:22

@林利振: 

 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());         }

    }

还是不行啊

支持(0) 反对(0) 挨踢新手 | 园豆:71 (初学一级) | 2013-07-21 19:27

@挨踢新手: 你做SSO的吧,你上面的访问地址是由LocalSTS来访问,不需要客户程序匹配这条路由规则吧!  我对WIF不了解...

支持(0) 反对(0) 林利振 | 园豆:206 (菜鸟二级) | 2013-07-21 21:44

@林利振: 

这个应该不用必须是LocalStS来访问

只需要这个路径可以访问,里面的XML数据是正确的就行了

问题是现在这个路径都访问不通

支持(0) 反对(0) 挨踢新手 | 园豆:71 (初学一级) | 2013-07-22 10:22

@挨踢新手: 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" />

上的地址也不是你这样访问的

支持(0) 反对(0) 林利振 | 园豆:206 (菜鸟二级) | 2013-07-22 11:37

@林利振: 

FederationMeatda是可以以服务方式暴露出来的,我用WCF方式暴露出来的是可以的,

WCF方式用的ReWrite方式重定向的URL

但是在Mvc中不知道怎么来写这个URL了,路由死活就是不认

支持(0) 反对(0) 挨踢新手 | 园豆:71 (初学一级) | 2013-07-23 20:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册