WCF Rest 4.0 中不带尾部斜杠的简单 URL 路由

2024-02-23

我有一个基于 WCF REST 服务模板 40(CS) 的 WCF REST 4.0 项目。我想公开简单的服务端点 URLwithout尾部斜杠。例如:

  1. CarService.cs
    • http://www.domain.com/cars http://www.domain.com/cars- GET 返回所有汽车的列表
    • http://www.domain.com/cars/123 http://www.domain.com/cars/123- GET 返回一辆 ID 为 123 的汽车
  2. TruckService.cs
    • http://www.domain.com/trucks http://www.domain.com/trucks- GET 返回所有卡车的列表
    • http://www.domain.com/trucks/456 http://www.domain.com/trucks/456- GET 返回 ID 为 456 的单辆卡车

我将上面的 URL 视为资源请求(而不是目录),这就是为什么我认为尾部斜杠在这里不合适。

不幸的是,我似乎无法获得我想要的行为,因为我总是被重定向到 /cars/ 和 /trucks/with尾部斜杠。

以下是我定义“汽车”路线和服务方法的方法 - 请注意,我没有在任何路线或 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 http://www.domain.com/about没有重定向到/about/。如何在 WCF REST 4.0 中获得相同的行为?


您遇到的主要问题是current当 WebGet 属性中的 UriTemplate 为空字符串时,WCF REST 版本会导致 307 重定向(到“/”)。据我所知,当前版本无法解决此问题。

但是,如果您想要一个解决方案,1) 允许您区分服务,2) 具有(相对)短的 URI,那么您的问题有几个“中间立场”解决方案。

第一个解决方案您可以将其放入您的 global.asax 文件中(每个这个例子 http://geekswithblogs.net/michelotti/archive/2010/08/21/restful-wcf-services-with-no-svc-file-and-no-config.aspx)。您可以为每个服务制定一个服务路线:

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 入门套件 http://aspnet.codeplex.com/wikipage?title=WCF%20REST(即 WebServiceHost2Factory)。

RouteTable.Routes.Add(new ServiceRoute("cars", new WebServiceHost2Factory(), typeof(CarService)));

当使用您在上面尝试使用的 URI 时,这不会导致 307 重定向,因此可以准确满足您的需要。尽管我意识到使用该服务主机工厂而不是 WCF 4 附带的服务主机工厂感觉有点奇怪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF Rest 4.0 中不带尾部斜杠的简单 URL 路由 的相关文章

  • WCF 服务中无法解释的程序集负载 (IIS 7)

    我正在开发一个新的 WCF Web 服务 该服务将托管在现有的 ASP NET Web 应用程序中 当我尝试运行服务的 svc 文件时 出现异常 无法找到程序集的文件 无法加载文件或程序集 System IdentityModel Vers
  • 如何在没有 baseUrl 的情况下设置 Retrofit

    我的 apiPath 是完全动态的 我有包含 ipAddress 和 SSLprotocol 等字段的项目 基于它们我可以构建我的网址 private String urlBuilder Server server String proto
  • 如何在运行时通过 URL 使用 WCF Web 服务?

    我想通过 URL 访问服务中公开的所有方法 如果假设 URL 为 http localhost MyService MyService svc 我如何访问方法 如果假设我有一个 ServiceReference 如果没有服务参考号该怎么办
  • PHP:在 CURL GET 调用中使用 API 密钥

    我看过关于使用 api 密钥在curl 中验证 post 调用的帖子 我有一个 GET 调用 需要 apikey 进行授权 即请求必须具有包含 apiKey 的授权标头 我已经获得了 api 密钥并尝试将其用于 GET 调用
  • 错误:在 Visual Studio 2013 中找不到类型或命名空间名称“ApplicationUser”

    我正在学习 RESTful WCF 服务 教程 但是当我构建我的应用程序时 我收到此错误 找不到类型或命名空间名称 ApplicationUser 您是否缺少 using 指令或程序集引用 c users basma documents v
  • 使用 Post 以 REST 方式更新值

    我对 REST 很陌生 所以如果这是一个愚蠢的问题 请原谅我 这样 我就有了客户资源 一个客户有很多信用 所以 我想获取客户积分的 URL 是 客户 21 积分 其中 21 是客户 ID 现在 如果我没有全额积分 如何添加积分 例如 客户有
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 使用 C# 发送要在服务器上执行的代码 - 类似于 Java RMI

    这是java中的示例代码 共享接口 import java rmi Remote import java rmi RemoteException public interface Compute extends Remote public
  • Django REST Framework:无法使用视图名称解析超链接关系的 URL

    我已经广泛研究了这个相当常见的问题 但没有一个修复对我有用 我正在 REST 框架中构建 Django 项目 并希望使用超链接关系 用户可以拥有许多独立的汽车和路线 路线是位置的集合 这些是我的序列化器 class CarSerialize
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • Spring Boot 应用程序中的 Vaadin 23 Rest-API 和 UI

    我使用 Vaadin 23 3 5 开发了一个小型应用程序 到目前为止 我仅将 Spring Boot Security 与默认的 LoginView 结合使用来进行身份验证 然后使用 MainLayout 来浏览我的应用程序 但现在我需要
  • REST Web 服务 WSDL? [复制]

    这个问题在这里已经有答案了 我正在实现一个 Web 服务 并且已经实现了 REST 和 SOAP 版本 看看哪个版本适合我的需求 我决定选择 REST 因为它很简单 而且我可能会开发一个 iPhone 应用程序来使用它 我的问题很简单 是否
  • 获取/发布到 RESTful Web 服务

    我需要从 VB6 对 RESTful Web 服务进行一些 GET 和 POST 操作 最好和最简单的方法是什么 您需要添加对 MSXML 库的引用 Dim sUrl As String Dim response As String Dim
  • WCF 服务引用从 WSDL 生成 void 方法

    这是我第一次尝试使用 WCF 所以我猜我做错了什么 我正在尝试访问 WSDL 定义的肥皂服务http confluence atlassian com rpc soap axis confluenceservice v1 wsdl http
  • 如何从c#中的窗口服务获取登录用户和机器名?

    如何在c 中从窗口服务获取登录用户 交互式用户 和机器名 当我尝试使用环境和其他类来登录用户名时 它只从窗口服务返回 NT AUTHORITY SYSTEM 该服务在 SYSTEM 帐户下执行 因此您在Environment班级 机器名称应
  • 通过 PayPal REST API 示例获得折扣?

    PayPal GURUS 我需要帮助 如何插入折扣 我使用 REST API 可能是某个 可以显示代码示例吗 有什么方法可以使用 PHP REST API 发送折扣金额吗 目前 REST 支付 API 不支持折扣 您最好的选择是计算您端的折
  • 具有订阅者缓存的 WCF Pub/Sub

    Problem 如何使用 WCF 提供分布式 可扩展且具有抗灾能力的发布 订阅服务 Details 请注意 除了 Tibco EMS 等消息传递 中间件解决方案之外 我们还在考虑这种方法 我一直在研究 WCF 特别是如何使用它来提供发布 订
  • 对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是什么?

    我正在创建一个 RESTful API 它将处理许多用户交互 包括使用存储的信用卡下订单 如果订单成功 我将返回 200 OK 如果订单请求格式错误或无效 我将返回 400 Bad Request 但如果订单实际处理过程中出现问题 我该怎么
  • 如何在自托管 WCF 中获取多部分表单数据?

    我已经搜索了很长一段时间 但没有找到我要找的东西 我在 Windows 应用程序中自行托管了一个 http WCF 现在 在我的服务方法之一中 我需要接收一个文件和一些表单数据字段 在类似的问题中 情况要么发送一个文件 这是通过流数据然后转
  • 数据协定中的 IsReference 属性

    目的是什么IsReference财产在DataContract 应用此属性后 请求和响应有何变化 它决定对象如何序列化 默认情况下 IsReference false Setting IsReference true允许对可以互相引用的对象

随机推荐

  • 如何使用 Javascript 找出短 URL 指向的位置

    我创建了一个短网址 比如说https my short link foo 即指向https my other website bar 如何在浏览器中使用 javascript 方法检索此 url 我使用的是角度 这将取决于如何my shor
  • 删除 Facebook 评论插件下方的空白

    看看这个链接 http www equispot com horses for sale 416 向下滚动一点 您应该会看到一个 Facebook 评论插件 其下方嵌入了 Google 地图 我的问题是 评论插件的底部和地图的顶部之间有大量
  • FileInputStream 如何获取 File 的内容?

    我有一个文件f我需要把它影响成FileInputStream fs File f new File C dir foo txt FileInputStream fs FileInputStream f 但我收到这个错误 Cannot cas
  • 从 1.5 更新到 Android Studio 2.0 后,ndk 语法高亮不起作用或可能被破坏

    编辑器窗口中 C C 代码的语法突出显示在 AS 1 5 中运行良好 但从 AS 1 5 更新到 2 0 后 即使使用示例 HelloJNI 项目也无法正常工作 尝试使用保存的设置 重置默认设置以及全新下载和安装 AS 2 0 但没有任何效
  • 如何将 Assetic 用于 requireJs

    我正在尝试在 synfony2 项目中使用 require js 这是主树枝文件中的代码 文件vendor js require js已正确加载 但对于文件bundles web js main js我收到消息 未捕获的错误 模块加载超时
  • NextJS 动态路由与模态重新加载导致覆盖背景消失

    我有一个非常简单的 NextJS 应用程序 打开页面将更新 URL 但不会触发导航 而是在模式中显示内容 URL 仍然反映实际页面位置 任何刷新都会将用户带到那里 当模式打开时 我仍然希望保留页面上的原始内容在背景中淡出 并且模式应该出现在
  • 可以根据另一个单元格的值锁定单元格范围吗?

    我正在使用跟踪器来测试新的更改以及何时测试 如果新更改不适用 我不想删除它 我想禁用 并变灰 所有可用于选择完成日期的单元格 但仅限于该行 我尝试过使用以下方法 但没有任何运气 工作表上的条件格式 进行更改时执行的 VBA 代码 数据验证
  • BABEL:未知选项:base.Children

    我刚刚做了一个npm update并获得了一些新的软件包版本 这破坏了我的构建 使我无法使用默认值updateSchema js from https github com relayjs relay starter kit blob ma
  • 使用 nutch REST api 的 Nutch 弹性索引器中的未知问题

    我试图使用 REST 端点公开 nutch 但在索引器阶段遇到了问题 我正在使用 elasticsearch 索引编写器将文档索引到 ES 我使用了 NUTCH HOME runtime deploy bin nutch startserv
  • 如何通过Webpack和6to5使用带有es6模块的npm包?

    假设我想在我的项目 或任何给定的 npm 包 中使用 Immutable 我有npm install编辑了它 所以它在node modules 当然 它有 CommonJS 导出 然而 我想在我的项目中使用 es6 模块 我使用 Webpa
  • 如何在 AssemblyResolve 事件之前在运行时加载程序集?

    实际上 我尝试在我的解决方案中实现某种 静态链接 程序集 所以我尝试了以下方法 使用 CopyLocal false 添加对我的程序集的引用 使用 添加为链接 将 dll 文件本身添加到我的解决方案中 使用 添加资源 添加现有文件 将 dl
  • 尝试根据当前 URL 中的当前字符串向属性添加类

    我整个早上都在努力让它发挥作用 但没有成功 如果我执行以下代码 persist header a each function var this this if window location href indexOf signage 1 t
  • 使用 JInternalFrame 和一些按钮

    我们可以使用一个JInternalFame https docs oracle com javase tutorial uiswing components internalframe html主框架中有一个按钮 该框架包含一个JDeskt
  • 如何让 CMake 在生成 Visual Studio 解决方案后执行一些脚本

    我正在使用 CMake 来构建一个项目 我想在 CMake 生成解决方案后执行一些脚本 比如 python 脚本 这样我就不必每次都手动执行它 我正在使用 Cmake 2 8 有谁知道 Cmake 为此目的提供的任何 userhook 或其
  • 在 Java 中读取和写入同一个文件

    我想读自criteria txt文件 以标记化并在同一文件的末尾附加标记 程序抛出异常 No file found 我不知道我的错误在哪里 任何建议都会对我有帮助 先感谢您 这是我的代码 import java io import java
  • 如何以 HTML 格式发送 PUT/DELETE 请求?

    我正在 PHP 中制作 REST API 我知道我可以通过以下方式捕获请求方法 SERVER REQUEST METHOD 但是 如何在浏览器中触发 PUT DELETE 请求 我无法想象更改表单标记的方法属性以指定除 GET 或 POST
  • 线程只运行一次

    当线程完成后 您无法使用 start 方法再次运行它 它会抛出异常 谁能解释一下 为什么 这样的架构决策背后的原因是什么 因为在单独的线程中执行代码的方法不是创建一个线程 这与什么是线程的系统视图相关 关于绿色线程和系统线程之间的区别有无穷
  • 防止刷新时插入重复记录而不重定向

    我有这样的脚本 if isset POST comment posted user comment mysql real escape string POST user comment add user comment Event addU
  • 如何获取Unity中正在注入的对象的类型?

    我有一个类型在其构造函数中接收另一个类型 该类型通常是创建它的对象的类型 例如 public class Logger public Logger Type parent 我想指示Unity解决Logger将需要它的对象的类型作为参数传递给
  • WCF Rest 4.0 中不带尾部斜杠的简单 URL 路由

    我有一个基于 WCF REST 服务模板 40 CS 的 WCF REST 4 0 项目 我想公开简单的服务端点 URLwithout尾部斜杠 例如 CarService cs http www domain com cars http w