问题描述
我正在尝试编写一些服务来通过WCF数据服务交换数据。
使用POCO实体生成器生成的实体和上下文。
我已成功发布服务使用DataServiceHost
所有似乎都工作,我得到数据模式,对象列表,并可以构建服务引用。
但是一些对象包含符号'?'的字符键  (转换为char(10)的时间可以包含任何char)
所以我在列表中收到它:
< entry>
< ID> HTTP://本地主机:3666 /互联网/迈德特/ AnyTable("%3FK%40%7D%23%D0%B05o%D0%BB%D1%8C")< / ID>
... ...
< d:ID> k @}#а5oль< / d:ID>
... ...
但是当我尝试它时,我在OnStartProcessingRequest中看到了这个请求
但是uri已经被转换和破坏,因为它认为" E&D0%90ZH; 4keI')" - 查询参数
- &NBSP;&NBSP;&NBSP; RequestUri&NBSP;&NBSP;&NBSP; {HTTP://本地主机:3666 /互联网/迈德特/ AnyTable("?EАZH; 4keI")}&NBSP;&NBSP;&NBSP; System.Uri
&NBSP;&NBSP;&NBSP; AbsolutePath&NBSP;&NBSP;&NBSP; " / Internet / MyData / AnyTable('" string
AbsoluteUri " http:/ / localhost:3666 / Internet / MyData / AnyTable('?E%D0%90ZH; 4keI')" string
  ;权限 " localhost:3666" string
DnsSafeHost " localhost" string
Fragment "" string
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;主机&NBSP;&NBSP;&NBSP;"本地主机"&NBSP;&NBSP;&NBSP;串
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ; HostNameType Dns System.UriHostNameType
IsAbsoluteUri true bool
&nb属;&NBSP;&NBSP; IsDefaultPort&NBSP;&NBSP;&NBSP;假NBSP;&NBSP;&NBSP; bool
&NBSP;&NBSP;&NBSP; ISFILE&NBSP;&NBSP;&NBSP;假NBSP;&NBSP;&NBSP; bool
&NBSP;&NBSP;&NBSP; IsLoopback&NBSP;&NBSP;&NBSP;真&NBSP;&NBSP;&NBSP; bool
&NBSP;&NBSP;&NBSP; IsUnc&NBSP;&NBSP;&NBSP;假NBSP;&NBSP;&NBSP; bool
&NBSP;&NBSP;&NBSP; &局部路径NBSP;&NBSP;&NBSP; " / Internet / MyData / AnyTable('" string
OriginalString " http:/ / localhost:3666 / Internet / MyData / AnyTable('?E%D0%90ZH; 4keI')" string
  ; PathAndQuery " / Internet / MyData / AnyTable('?E%D0%90ZH; 4keI')" string
Port 3666 int
Query "?E% D0%90ZH; 4keI')"&NBSP;&NBSP;&NBSP; string
和这个例外例如
错误:异常错误请求 - 查询语法错误。状态码400错误:(System.Data.Services.DataServiceException:错误请求 - 查询语法错误。
$
at System.Data.Services.RequestUriProcessor.RemoveFilterParens(String filter)
at System.Data.Services.RequestUriProcessor.ExtractKeyValues(ResourceType resourceType,String filter)
at System.Data.Services.RequestUriProcessor.ComposeQuery(字符串过滤器,SegmentInfo段)
在System.Data.Services.RequestUriProcessor.CreateFirstSegment(IDataService服务,字符串标识符,布尔检查权限,字符串queryPortion,布尔isLastSegment,布尔& crossReferencingUrl)
&NBSP;&NBSP;在System.Data.Services.RequestUriProcessor.CreateSegments(字符串[]段,IDataService服务)
&NBSP;&NBSP;在System.Data.Services.RequestUriProcessor。 ProcessRequestUri(Uri absoluteRequestUri,IDataService服务)
at System.Data.Services.DataService`1.ProcessIncomi ngRequestUri()
在System.Data.Services.DataService`1.HandleRequest())
如果再一次编码第一个符号'?' - > '%3F' - > '%253F'它将起作用
如何配置dataservice以正确处理我的字符键中的符号'?'?
或者where我可以进行额外的编码
谢谢
I'm trying to write some services to exchange data via WCF dataservice.
Entities and context generated using POCO Entity Generator.
I have successfully published a service using DataServiceHost
And all seems to work, I get the data schema, and lists of objects and can build service reference.
But some object contains character key with symbol '?' (time converted to char(10) can contain any char)
so i receive it in list:
<entry>
<id>http://localhost:3666/Internet/MyData/AnyTable('%3Fk%40%7D%23%D0%B05o%D0%BB%D1%8C')</id>
...
<d:id>?k@}#а5oль</d:id>
...
but when i try it, I see this requests in OnStartProcessingRequest
but uri is already converted and broken because it think that "?E%D0%90ZH;4keI')" - Query parameter
- RequestUri {http://localhost:3666/Internet/MyData/AnyTable('?EАZH;4keI')} System.Uri
AbsolutePath "/Internet/MyData/AnyTable('" string
AbsoluteUri "http://localhost:3666/Internet/MyData/AnyTable('?E%D0%90ZH;4keI')" string
Authority "localhost:3666" string
DnsSafeHost "localhost" string
Fragment "" string
Host "localhost" string
HostNameType Dns System.UriHostNameType
IsAbsoluteUri true bool
IsDefaultPort false bool
IsFile false bool
IsLoopback true bool
IsUnc false bool
LocalPath "/Internet/MyData/AnyTable('" string
OriginalString "http://localhost:3666/Internet/MyData/AnyTable('?E%D0%90ZH;4keI')" string
PathAndQuery "/Internet/MyData/AnyTable('?E%D0%90ZH;4keI')" string
Port 3666 int
Query "?E%D0%90ZH;4keI')" string
and this couse exception
Error: Exception Bad Request - Error in query syntax. status code 400 Error:(System.Data.Services.DataServiceException: Bad Request - Error in query syntax.
at System.Data.Services.RequestUriProcessor.RemoveFilterParens(String filter)
at System.Data.Services.RequestUriProcessor.ExtractKeyValues(ResourceType resourceType, String filter)
at System.Data.Services.RequestUriProcessor.ComposeQuery(String filter, SegmentInfo segment)
at System.Data.Services.RequestUriProcessor.CreateFirstSegment(IDataService service, String identifier, Boolean checkRights, String queryPortion, Boolean isLastSegment, Boolean& crossReferencingUrl)
at System.Data.Services.RequestUriProcessor.CreateSegments(String[] segments, IDataService service)
at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service)
at System.Data.Services.DataService`1.ProcessIncomingRequestUri()
at System.Data.Services.DataService`1.HandleRequest())
if one more time encode the first symbol '?' -> '%3F' -> '%253F' it will work
how I can config dataservice to correctly handle symbol '?' in my character key?
or where i can make additional encoding
Thanks
推荐答案
问候,
PQ
这篇关于RequestUriProcessor错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!