问题列表 - 第12018页

当需要一些复杂的参数时,设计HTTP请求的最佳方法是什么?

我有一些我正在写的Web服务,我想尽可能地保持RESTful.我使用在IIS/ASP.NET/SharePoint中运行的HTTPHandler来托管这些Web服务.

我的大多数服务都期望HTTP GET.我有两个只是返回一些数据(即查询)并将是幂等的,但参数可能有点复杂.它们都可以包括服务参数中的字符,这些字符至少不允许URL的PATH部分.

使用IIS,ASP.NET和SharePoint我发现URL路径中的以下字符甚至没有进入我的HttpHandler,即使Url编码(请求爆炸,我对此没有任何简单的控制) :

  • %(%25)
  • &(%26)
  • *(%2a,但没有Url编码)
  • +(%2b)
  • :(%3a)
  • <(%3c)
  • (%3E)

以下字符使其成为我的HttpHandler,但即使Url编码,UriTemplate也无法正确处理它们:

  • (%23)

  • .(%2e,但没有Url编码; UriTemplate删除了"."如果是/之前的最后一个字符)
  • ?(%3f)的
  • /(%2f - 即使UrlEncoded,UriTemplate也因为显而易见的原因而失败)
  • \(%5c)

所以,我有点彻底,但我需要在查询字符串中测试这些url编码的字符.看起来这在大多数情况下都会起作用.

在我的一个服务中,作为参数的特殊字符在语义上是查询/过滤器的一部分(实际上是搜索服务的搜索项),但在另一个中它们实际上不是查询/过滤器的一部分,所以理想情况下它们是路径而不是查询字符串.

我的问题是,最好的选择是什么?以下是我所知道的一些内容:

  1. 使用HTTP GET和查询字符串. 任何可能使用特殊字符的内容都应该在查询字符串和Url Encoded上. 这是我倾向于的地方,但我担心极长的查询字符串(IE有2083限制)

  2. 在路径中使用HTTP GET和base64编码.对于可能使用特殊字符的任何参数, 请使用Modified Base64 for URL,并将其作为路径的一部分(如果需要). 我试过这个并且它有效,但它有点难看.关于极长查询字符串的问题仍然存在.

  3. 使用HTTP POST和邮件正文. 任何可能使用特殊字符的东西都应该在请求的正文中. 似乎是一个不错的解决方案,但帖子被理解为和(我认为)通常意味着更改(而没有变化发生在这里).

  4. 使用HTTP GET和邮件正文. 任何可能使用特殊字符的东西都应该在请求的正文中.根据SO,这似乎是一个坏主意:请求正文Roy Fielding的HTTP GET.

  5. 根据请求的大小,使用#3和#1或#2的组合.

  6. 其他???

请注意,在某些情况下,我可以更改周围的东西以防止特殊字符(我可能会这样做),但我无法在所有情况下都这样做.


关于URI长度,RFC2616 Sec3.2.1说明如下:

HTTP协议不对URI的长度设置任何先验限制.服务器必须能够处理它们所服务的任何资源的URI,并且如果它们提供可以生成这种URI的基于GET的表单,它应该能够处理无限长度的URI.如果URI长于服务器可以处理的长度,服务器应该返回414(Request-URI Too Long)状态(参见10.4.15节).

  Note: Servers ought to be cautious about depending on …
Run Code Online (Sandbox Code Playgroud)

rest get http uritemplate

31
推荐指数
4
解决办法
3万
查看次数

为什么某些文件未在App_Data文件夹中发布?

我正在使用Visual Studion 2008来构建和部署Web服务项目.我在App_Data文件夹中添加了一堆文件:一些xml,一些纯文本和两个pdf文件.所有这些文件都包含在.csproj文件中(如果不是,它们将不会被发布)但是当从VS2008进行"发布"时(当然选择"选择包含来自App_Data文件夹的文件")pdf是没有发表.我已经选择了"替换"和"删除"选项对此进行了测试.

有谁知道为什么某些文件,在这种情况下是PDF,没有发布?

publish app-data visual-studio-2008

11
推荐指数
1
解决办法
3817
查看次数

Jquery:选择中的选择

我从先前的选择中存储了一系列不同的元素,称之为' a'.

然后我如何从前一个选择(a)中做另一个选择并返回类型的元素input

jquery selection

3
推荐指数
1
解决办法
1609
查看次数

Ruby on Rails和XSS预防

在Ruby on Rails中阻止XSS的做法是什么?我在网上发现了许多旧文档,大部分时间都是使用 h/html_escape帮助程序来逃避来自用户的任何变量.

我从较新的文档中了解到,在2.0版及更高版本中,有一种 清理方法可以自动清除所谓恶意输入的输入.是否足够或者您是否正在采取更多措施保护您的应用程序?

ruby security xss ruby-on-rails

7
推荐指数
2
解决办法
8519
查看次数

如何从sqlite3数据库中的字符串中删除字符?

我有一个像这样的字符串a)我的sqlite数据库中的文本..我想要删除a)从数据库..任何人都知道这个查询?

sqlite query-string

9
推荐指数
2
解决办法
2万
查看次数

如何从视图中调用应用程序助手中的方法?

我在application_helper.rb文件中定义了一个自定义方法,如下所示:

def rxtrnk(line)
    rxTRNK = /\w{9,12}/m
    trnks = Array.new
    i = 0
    while i <= line.size
        if line[i].match(rxTRNK)
            trnks[i] = line[i].scan(rxTRNK)
        end
        i += 1
    end

    return trnks
  end
Run Code Online (Sandbox Code Playgroud)

然后我试着从这样的视图中调用它:

<% @yo = rxtrnk(@rts)%>
Run Code Online (Sandbox Code Playgroud)

但我得到一个这样的错误页面:

NoMethodError in TrunksController#routesperswitch

undefined method `rxtrnk' for #<TrunksController:0x7f2dcf88>
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常新手的问题,但我无法通过谷歌搜索找到解决方案:(感谢您的帮助

编辑/这里是完整的application_helper.rb

module ApplicationHelper
     def rxtrnk(line)
    rxTRNK = /\w{9,12}/m
    trnks = Array.new
    i = 0
    while i <= line.size
        if line[i].match(rxTRNK)
            trnks[i] = line[i].scan(rxTRNK)
        end
        i += 1
    end

    return trnks
  end

end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

26
推荐指数
3
解决办法
5万
查看次数

我应该清理降价吗?

对于我的post实体,我将HTML和MARKDOWN存储在数据库中(HTML从MARKDOWN转换).HTML用于在页面上呈现,而MARKDOWN用于编辑功能(使用WMD).我在存储到db之前清理HTML.问题是:我是否应该对降价进行消毒?或者它是xss安全的,如果我只传递给wmd编辑器?

html validation markdown wmd

10
推荐指数
1
解决办法
2760
查看次数

在SQL查询中一起使用union和count(*)

我有一个SQL查询,看起来像这样:

select name, count (*) from Results group by name order by name
Run Code Online (Sandbox Code Playgroud)

和另一个相同的,从归档结果表加载,但字段是相同的.

select name, count (*) from Archive_Results group by name order by name
Run Code Online (Sandbox Code Playgroud)

如何在一个查询中将两者结合起来?(因此,群组仍将正常运作).我尝试使用union all,但是它不起作用.我错过了什么?

sql union

40
推荐指数
3
解决办法
11万
查看次数

WPF超链接中的文本换行

在我的WPF应用程序中,我有这个:

<StackPanel>
  <TextBlock>
     <Hyperlink>
       <TextBlock TextWrapping="Wrap" Name="HyperlinkText" />
     </Hyperlink>
  </TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

但是,如果我设置HyperlinkText.Text为包装的长文本,则整个文本仅在底部加下划线一次(参见图像).有没有办法让每一行都单独加下划线而不需要人工包装?

wpf xaml hyperlink word-wrap

13
推荐指数
2
解决办法
5852
查看次数

删除图像周围的黑色边框

我有一些JPG图像.其中一些可能在一侧或多侧有黑色边框,我想将它们删除.黑色边框可能不会围绕实际图像 - 有些可能只有底部的边框(实际图像位于顶部),而有些可能居中(这意味着两边是黑色边框,但没有连接).更糟糕的是,图像是JPG Compressed,所以它们可能不再是0,0,0 black.

在一个Paint程序中,我会"简单地"使用具有低容忍度的Magic Wand工具,但我需要在ASP.net上的C#中进行,我不知道最好的方法是什么.

我应该"扫描"每一行然后每列(两个嵌套的for循环)来查找黑色区域吗?听起来有些愚蠢,性能和CPU负载方面.或者GDI +已经有一些魔棒工具?

图像不是那么大(最大474x474像素)并在之后缓存,但我需要尽可能降低服务器负载.

有什么暗示最不愚蠢的做法是什么?

.net c# asp.net graphics gdi+

5
推荐指数
1
解决办法
2901
查看次数