c#和Asp.netwebapi中的URL编码我有一个ASP.NETwebapi,它接收web请求并返回Json数据。浏览此url:http://1.2.3.4/api1/api/values/mypartname将返回以下json字符串:{"PartName":"mypartname","PartDes":"53.6X53.6APA/ALIM1NOTPAK","PartLocation":"A36"}但在发送包含空格或引号的零件名称时,如下所示:http://1.2.3.4/api1/api/values/mypartna"me:http://1.2.3.4/api1/api/values/mypartna"me得到404-找不到文件或目录。错误。我在.NET4控制台应用程序中使用json:staticvoidMain(string[]args){try{stringpartName="TAPE563M3/4"";WebRequestwr=WebRequest.Create("http://1.2.3.4/api1/api/values/"+HttpUtility.UrlEncode(partName));wr.Credentials=CredentialCache.DefaultCredentials;HttpWebResponsehwr=(HttpWebResponse)wr.GetResponse();StreamdataStream=hwr.GetResponseStream();StreamReader阅读器newStreamReader(dataStream);stringjson=reader.ReadToEnd();//一些json解析函数des(json);reader.Close();dataStream.Close();hwr.Close();}catch(Exceptionex){Console.WriteLine(ex.Message);}finally{Console.ReadKey();}}此行抛出异常:HttpWebResponsehwr=(HttpWebResponse)wr.GetResponse();异常消息为:远程服务器返回错误:(404)NotFound。我是不是对mypartname做错了什么?我还尝试根据以下内容手动替换有问题的字符:HTMLURL编码参考并使用此函数:Uri.EscapeDataString(partName)但没有成功。编辑这是routeConfig定义:routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute(name:"Default",url:"{controller}/{action}/{id}",defaults:new{controller="Home",action="Index",id=UrlParameter.Optional});和apiGET方法://GETapi/values/5publicstringGet(stringid){Listdummies=newList();stringcon="用户id=sa;"+"password=1234"+"server=someServer\someInstance;"+"数据库=游戏;"+"连接超时=30";//SqlConnectionsqlConn=newSqlConnection(con);使用(SqlConnectionsqlconn=newSqlConnection(con)){sqlconn.Open();StringBuildersb=newStringBuilder();sb.Append("SELECTPART.PARTNAME,PART.PARTDES,PARTPARAMA.LOCATION");sb.Append("FROMPARTLEFTJOINPARTPARAMA");sb.Append("ONPART.PART=PARTPARAMA.PARTPARAM");sb.Append("WHEREPART.PARTNAME=@part");使用(SqlCommandcmd=newSqlCommand(sb.ToString(),sqlconn)){cmd.Parameters.AddWithValue("part",id);SqlDataReadersdr=cmd.Execu阅读器();while(sdr.Read()){dummies.Add(newdummy{PartName=sdr.IsDBNull(0)?"Unknown":sdr.GetString(0),PartDes=sdr.IsDBNull(1)?"Unknown":sdr.GetString(1),PartLocation=sdr.IsDBNull(2)?"Unknown":sdr.GetString(2)});}}}if(dummies.Count()>0){stringjson=JsonConvert.SerializeObject(dummies[0]);返回json;}else{字符串json=JsonConvert.SerializeObject(null);返回json;编辑2015年4月10日:我把这个答案留给那些在他们的搜索中找到它的人,但是凯文在下面说了,斯科特汉塞尔曼在这里说了:[UrlPathEncode]没有按照你的想法去做...这种方法非常具体,命名不当并且现在完全过时我认为你的问题更多地与零件名称中的正斜杠有关。您可以使用HttpUtility.UrlPathEncode(partName)而不是HttpUtility.UrlEncode(partName)来处理空格和引号。处理正斜杠更成问题。详细内容请参考这篇文章以上是C#学习教程的全部内容:C#中的URL编码和Asp.netwebapi。如果对大家有用,需要了解更多C#学习教程,希望大家注意——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
