在 C# 中接受来自 URL 的特殊字符作为输入

Posted

技术标签:

【中文标题】在 C# 中接受来自 URL 的特殊字符作为输入【英文标题】:Accepting special characters as input from the URL in C# 【发布时间】:2021-11-29 05:18:58 【问题描述】:

使用语言:C#

输入:缩写或表情符号。

输出:缩写或表情符号的翻译

代码:

公共类 EmoticonController : ApiController // GET: api/表情/缩写/简写 [HttpGet] [Route("api/表情/缩写/shortform")]

 public string Abbreviation(string ShortForm)

     string outputMessage;

     // Switch case that assigns the outputMessage the translation to the abbreviation entered by the user 
     switch (ShortForm)
     

         case "TY":
             outputMessage = "Thank you";
             break;

         case "(~.~)":
             outputMessage = "sleepy";
             break;

         default:
             outputMessage = "Invalid Input";
             break;
     

     return outputMessage;
 

我在Visual Studio中运行上面的代码,输入网址为

localhost/api/表情/缩写/(~.~)

我收到以下错误: C# URL Special characters error

PS:截图 URL 确实与我提到的代码不同。请忽略这一点。我修复了它,但错误仍然存​​在。

【问题讨论】:

在截图中请求的 url 不同 URI 中允许的字符是有限的。如果您需要使用特殊字符(如您所做的那样),您应该对它们进行编码。见***.com/questions/1856785/characters-allowed-in-a-url、***.com/questions/575440/url-encoding-using-c-sharp、***.com/questions/44920875/… 【参考方案1】:

由于您有动作标题“...abbreviation/shortform”,因此您需要一个带有路由值的 MVC 样式 Url。这个 Url 对特殊字符非常敏感。您可以尝试对特殊字符进行编码/解码,但这并不总是成功的,有时甚至是不可能的。将查询字符串用作 URL 的一部分要容易得多。您可以通过将操作标题更改为此来实现它

[Route("~/api/emoticon/abbreviation")]
 public string Abbreviation(string ShortForm)

然后你就可以使用这个网址了

localhost/api/emoticon/abbreviation?shortForm=(~.~)

【讨论】:

成功了,谢谢!您能否详细说明为什么 url 必须有一个?缩写后? 不客气!请不要忘记接受答案,因为它很有用。您可以通过单击我的答案侧的复选标记来完成。

以上是关于在 C# 中接受来自 URL 的特殊字符作为输入的主要内容,如果未能解决你的问题,请参考以下文章

接受 JSpinner 中的测量单位作为输入

ASP C#:特殊字符:#、$、+ 不能通过 URL 参数

来自 URL 查询字符串的 jQuery 自动完成搜索

允许在 UITextfield ios 中使用德语 UMLAUT 字符

C# Rest 服务 - 无法在服务方法中接收 JSON 请求

如何转换 URL 格式的特殊字符 [重复]