- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 WCF REST 服务模板 40(CS) 的 WCF REST 4.0 项目。我想公开简单的服务端点 URL,不尾部斜杠。例如:
我将上述 URL 视为资源请求(而不是目录),这就是为什么我认为尾部斜杠在这里不合适。
不幸的是,我似乎无法获得我想要的行为,因为我总是被重定向到/cars/和/trucks/带有尾随斜杠。
以下是我定义“汽车”路线和服务方法的方法 - 请注意,我没有在任何路线或 URI 模板定义中包含任何斜杠:
// Global.asax.cs
RouteTable.Routes.Add(new ServiceRoute("cars", new WebServiceHostFactory(), typeof(CarService)));
// CarService.cs
[WebGet(UriTemplate = "")]
public List<Car> GetCollection()
{
return DataContext.GetAllCars();
}
请注意,MVC 不是这样工作的。使用 MapRoute 方法,我可以将请求直接路由到 http://www.domain.com/about,而无需重定向到/about/。如何在 WCF REST 4.0 中获得相同的行为?
最佳答案
您遇到的主要问题是,当 WebGet 中的 UriTemplate 为空字符串时,当前版本的 WCF REST 会导致 307 重定向(到“/”)属性。据我所知,当前版本中无法解决此问题。
但是,考虑到您需要一个能够 1) 允许区分服务,2) 具有(相对)短 URI 的解决方案,您的问题有一些“中间立场”解决方案。
第一个解决方案您可以将其放入 global.asax 文件中(根据 this example )。你可以为每个服务做一个服务路由:
RouteTable.Routes.Add(new ServiceRoute("cars", new WebServiceHostFactory(), typeof(CarService)));
RouteTable.Routes.Add(new ServiceRoute("trucks", new WebServiceHostFactory(), typeof(TruckService)));
此时,您可以在每个服务中填充 UriTemplate:
[WebGet(UriTemplate = "all")]
CarPool GetAllCars();
[WebGet(UriTemplate = "{carName}")]
Car GetCar(string carName);
这将允许您使用以下 URI:
www.domain.com/cars/all
www.domain.com/cars/123 or www.domain.com/cars/honda
卡车也类似:
www.domain.com/trucks/all
www.domain.com/trucks/123 or www.domain.com/trucks/ford
第二种解决方案使用 REST Starter Kit 中的服务主机(即 WebServiceHost2Factory)。
RouteTable.Routes.Add(new ServiceRoute("cars", new WebServiceHost2Factory(), typeof(CarService)));
当使用您在上面尝试使用的 URI 时,这不会导致 307 重定向,因此可以准确满足您的需要。尽管我意识到使用该服务主机工厂而不是 WCF 4 附带的服务主机工厂感觉有点奇怪。
关于wcf - WCF Rest 4.0 中不带尾部斜杠的简单 URL 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970951/
我是一名优秀的程序员,十分优秀!