本文介绍了RequestUriProcessor错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一些服务来通过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错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 00:08