none
WebApi传送参数错误 RRS feed

  • 问题

  • 1、客户端程序(WPF)向WebApi程序控制器方法传送参数,如:
                    HttpClient hc = new HttpClient();
                    string a = "20190430000000.000000+000OEMC - 300M";
                    string ab = "http://localhost:60170/api/UIHI?ui=" + a;
                    string strGet = hc.GetStringAsync(ab).Result;
    2、服务器端API对应控制器按对应重载接受到该参数,如:
        public class UIHIController : ApiController
        {
            public IEnumerable<string> GetAndSend(string ui)
            {
                //问题:接受的参数ui的值发生了变化,为:"20190430000000.000000 000OEMC - 300M"
                //注:字符串中的“+”变成了“ ”(半角空格)
            }
        }
    请问各位老师,如何避免这种传送错误?

    ly_he

    2020年11月2日 4:33

答案

  • Hi ly_he,

     

    您太客气了。

     

    关于Html特殊字符串,您可以查询Html实体列表,也就是html保留的字符。

    您也可以通过这个链接了解更多:https://www.w3school.com.cn/html/html_entities.asp 

     

    关于Server.UrlEncode(),您可以通过ctrl+左键在Visual studio去看该Server的class类型,实际可能是HttpServerUtility.UrlEncode 方法。命名空间是System.Web。

    具体详情,您可以访问:https://docs.microsoft.com/zh-cn/dotnet/api/system.web.httpserverutility.urlencode?view=netframework-4.8 

     

    希望回答能够帮助到您。

    Best regards,

    Sean

     

    • 已标记为答案 ly_he 2020年11月27日 14:55
    2020年11月23日 12:16

全部回复

  • Hi ly_he,

     

    字符串中的“+”变成空格的原因是因为你的a字符串是作为查询字符传递过去的,会被html解码。这样一来,“+”就会变成空格。

    “+”在查询字符中是有特殊含义的,如果你要传递“+”号,“+”需要被编码成“%2B

    你可以在添加字符串之前对字符串进行一次html编码,比如:

    string a= Server.UrlEncode(a);

    这样,"+"就可以被正确地传递了。

    希望回答能够帮助到你。

    Best regards,

    Sean


    • 已编辑 SeanFang 2020年11月9日 9:27 错别字
    2020年11月9日 9:17
  • 谢谢SeanFang老师,

    您的回复非常重要和准确,受教了。

    不好意思。我想再麻烦您一下。除了“+”外,查询字符串中还有哪些字符也会被Html做类似的解码处理?或者请您提供有关的参考资料。

    感谢!


    ly_he

    2020年11月11日 2:21
  • 不好意思,再麻烦老师一下:

    Server.UrlEncode()属于哪个命名空间,应该引用什么类集?

    谢谢。


    ly_he

    2020年11月11日 3:56
  • Hi ly_he,

     

    您太客气了。

     

    关于Html特殊字符串,您可以查询Html实体列表,也就是html保留的字符。

    您也可以通过这个链接了解更多:https://www.w3school.com.cn/html/html_entities.asp 

     

    关于Server.UrlEncode(),您可以通过ctrl+左键在Visual studio去看该Server的class类型,实际可能是HttpServerUtility.UrlEncode 方法。命名空间是System.Web。

    具体详情,您可以访问:https://docs.microsoft.com/zh-cn/dotnet/api/system.web.httpserverutility.urlencode?view=netframework-4.8 

     

    希望回答能够帮助到您。

    Best regards,

    Sean

     

    • 已标记为答案 ly_he 2020年11月27日 14:55
    2020年11月23日 12:16
  • SeanFang老师

    问题解决了。再次感谢!


    ly_he

    2020年11月27日 14:56