在 VS 中使用附加参数调试 REST 服务

Posted

技术标签:

【中文标题】在 VS 中使用附加参数调试 REST 服务【英文标题】:Debug REST Service with additional parameters in VS 【发布时间】:2017-09-25 00:51:15 【问题描述】:

我正在实现一个 REST 服务,它还需要额外的参数。我的问题是我在调试时无法进入特定方法。我将相关过程附加到 VS 并且一次调用调试工作正常。让我们先看看是什么导致了我的问题:

[OperationContract]
[WebGet(RequestFormat = WebMessageFormat.Json,
      ResponseFormat = WebMessageFormat.Json,
      UriTemplate = "/mrn/PatNr")]
List<LaborDataContract> LaborResultDetailsByPatNr(string PatNr);

[OperationContract]
[WebGet(RequestFormat = WebMessageFormat.Json,
      ResponseFormat = WebMessageFormat.Json,
      UriTemplate = "/mrn/PatNr&FromDate=FromDate&ToDate=ToDate")]
List<LaborDataContract> LaborResultDetailsByPatNrDatePeriod(string PatNr, string fromDate, string todate);

上述方法已经很好地实现了。

此服务调用正常工作:

http://localhost:50358/UszDataService/mrn/10171098

调用上面的URI我可以进入代码,所以调试工作正常。

但如果我调用以下 URI,调试总是会进入上述方法,而不是合同中定义的方法:

http://localhost:50358/UszDataService/mrn/10171098&FromDate=2017-03-01&Todate=2017-03-03

令人困惑的是,在被调用方法的参数(PatNr)中,当我检查内容时,我看到以下内容:

"10171098&FromDate=2017-03-01&Todate=2017-03-03"

我是否错过了定义具有多个参数的合同的内容?

非常感谢任何帮助。

问候 桑德罗

【问题讨论】:

【参考方案1】:

你需要从 ?用于第一个查询参数,然后使用 & 用于下一个查询参数

http://localhost:50358/UszDataService/mrn/10171098?FromDate=2017-03-01&Todate=2017-03-03

【讨论】:

嗨 Andreas 感谢您的快速回复 :) Arrghh...是的,我明白了,已修复。但它仍然调用了错误的方法。将 url 步骤校准到只有一个参数的方法中 @SandroColletti 这两个模板实际上是相同的 url,这就是原因。查询参数不定义 url。这个localhost:50358/UszDataService/mrn/… 和localhost:50358/UszDataService/mrn/… 是一样的。您将不得不更改第二个模板 另外,您不需要模板中的查询参数。只需将它们作为参数,它就会从查询参数中提取它们 ahhhhh...我明白了,我不明白你在上一次回复中的意思。您能否提供一些额外的解释?会很棒。 如果你想使用查询参数而不是url参数,那么你不需要在url模板中定义它们,你只需要将它们放在方法的参数列表中。 UriTemplate = "/mrn2/PatNr")] List&lt;LaborDataContract&gt; LaborResultDetailsByPatNrDatePeriod(string PatNr, string fromDate, string todate); 这应该没问题

以上是关于在 VS 中使用附加参数调试 REST 服务的主要内容,如果未能解决你的问题,请参考以下文章

VS远程调试与附加调试

VS进程附加的使用

初次使用VS附加到进程功能

vs2017 调试附加进程 结束进程为啥很卡慢

[VS工具]远程在IIS附加调试代码

vs2012已附加有调试器,但是没有将该调试器配置为调试此未经处理的异常