我们正在考虑推进ASP.NET MVC项目,并提出了路由与参数的主题.
看看如何在ASP.NET MVC中轻松设置其中任何一个或两者的组合,在使用其中一个时,我应该注意哪些注意事项?
此语句不适用于PostgreSQL 8.2.4和PHP 5.2.17:
pg_query_params('SELECT $1', array(1));
ERROR: could not determine data type of parameter $1
Run Code Online (Sandbox Code Playgroud)
很公平.这是一个可能的解决方案:
pg_query_params('SELECT CAST($1 AS INTEGER)', array(1));
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我们明确了解数据类型.
但是下面的语句也有效,尽管它应该等同于第一个表达式:
pg_query_params('SELECT COALESCE($1)', array(1));
Run Code Online (Sandbox Code Playgroud)
为什么?是否COALESCE以某种方式修改$ 1的数据类型,或保证一些简单数据类型的结果?
编辑:文档在主题上相当短COALESCE.
Rails和其他框架使用了一块Ruby中间件来解析您发送到服务器的参数到嵌套Hash对象中.
如果将这些参数发送到服务器:
person[id] = 1
person[name] = Joe Blow
person[email] = joe.blow@test.com
person[address][street_address] = 123 Somewhere St.
person[address][city] = Chicago
person[address][zip] = 12345
person[other_field][] = 1
person[other_field][] = 2
person[other_field][] = 3
Run Code Online (Sandbox Code Playgroud)
他们被解析为:
{
:person => {
:id => "1",
:name => "Joe Blow",
:email => "joe.blow@test.com",
:address => {
:street_address => "123 Somewhere St.",
:city => "Chicago",
:state => "IL",
:zip => "12345"
},
:other_field => [ 1, 2, 3 ]
}
}
Run Code Online (Sandbox Code Playgroud)
我相信PHP也支持这一点.任何人都可以告诉我这个约定叫什么,它来自哪里,以及其他语言支持它?(Perl,Python等)
变化1:
file.jsp?parameter1=¶meter2=abc
Run Code Online (Sandbox Code Playgroud)
变化2:
file.jsp?parameter1¶meter2=abc
Run Code Online (Sandbox Code Playgroud)
我知道Variation 1被认为是有效的,但变体2被认为是有效的吗?具体来说,参数没有值,在这种情况下是否需要等号?
我找到了一个说明我问题的jsbin.http://emberjs.jsbin.com/ucanam/2708.
最后一个链接,在链接到没有设置显式查询参数的情况下,它使用控制器上的当前粘滞查询参数值.有没有办法关闭这个粘性功能?会这样做会打破其他情况吗?
我目前的解决方案是在我想要清除的每条路线上清空查询参数:
export default Ember.Route.extend({
deactivate: function() {
var controller = this.controllerFor(this.get('controllerName'));
var queryParams = controller.get('queryParams');
for (var i = 0; i < queryParams.length; i++)
controller.set(queryParams[i], null);
}
});
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎应该有一个更简单的方法.
我应该注意,{{#link-to 'route' (query-params val=null)}}{{/link-to}}为每条路径做一些事情不是一个选择,因为我有一些可重用的代码,其中路由是一个变量,所以我不知道查询参数我必须为null.
如果答案中的文档发生变化,这是正确的方法:
export default Ember.Route.extend({
resetController: function(controller, isExiting) {
if (isExiting) {
var queryParams = controller.get('queryParams');
for (var i = 0; i < queryParams.length; i++)
controller.set(queryParams[i], null);
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在通过这个插件https://github.com/kellyselden/ember-query-params-reset很容易做到这一点.它还会重置为原始值,而不仅仅是将值清零.
通过在LINQPad中输入,我可以得到我期望的结果:
SELECT * FROM WorkTable WHERE WTName LIKE "DSD__20090410014953000%"
Run Code Online (Sandbox Code Playgroud)
(它显示了WTName值为DSD__20090410014953000.xml的记录")
但尝试以编程方式执行此操作正在尝试.我试过了:
const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName%";
using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection()))
{
con.Open();
SQLiteCommand cmd = new SQLiteCommand(qry, con);
cmd.Parameters.Add(new SQLiteParameter("wtName", tableName));
siteNum = Convert.ToInt32(cmd.ExecuteScalar());
}
Run Code Online (Sandbox Code Playgroud)
...但它会导致应用程序崩溃,我的日志文件告诉我原因:
Message: From application-wide exception handler: System.Data.SQLite.SQLiteException: SQL logic error or missing database
near "%": syntax error
Run Code Online (Sandbox Code Playgroud)
所以也许它认为查询参数被命名为"wtName%"而不是"wtName"; 但是将参数和"what"opertor("%")与空格分开也不起作用.
我可以通过将查询参数嵌入到字符串中来实现retro/kludgy,如下所示:
const string qry = String.Format("SELECT SiteNum FROM WorkTable WHERE WTName LIKE {0}%", tableName);
Run Code Online (Sandbox Code Playgroud)
...和做没有查询参数完全,但我怕如果我这样做,特洛伊·亨特将在我的房子出现了,与床栏枷我而责骂SQL注入. …
我有一个GET路由,我想在url中将对象参数编码为查询字符串.
在编写swagger文档时,我基本上会遇到错误,不允许我在类型参数中使用schema/ objecttypes query:
paths:
/mypath/:
get:
parameters
- in: path
name: someParam
description: some param that works
required: true
type: string
format: timeuuid #good param, works well
- $ref: "#/parameters/mySortingParam" #this yields an error
parameters:
mySortingParam
name: paging
in: query
description: Holds various paging attributes
required: false
schema:
type: object
properties:
pageSize:
type: number
cursor:
type: object
properties:
after:
type: string
format: string
Run Code Online (Sandbox Code Playgroud)
具有对象值的请求查询参数将被编码在实际请求中.
即使swagger在屏幕顶部显示错误,也会在swagger UI编辑器中正确呈现对象,但是错误会浮动在文档的顶部.
这是我的请求网址:
http://server.com/app/user/getuser/?userId=9999
注意,这userId是查询参数。未嵌入的路径参数。
我了解如果请求URL为:http : //server.com/app/user/getuser/9999并且ID 9999在数据库中不存在,则应使用404。
但是userId查询参数应使用哪种HTTP状态?现在我返回的是400,而不是404。
query-parameters http-status http-status-code-404 http-status-code-400
基本上是标题.我想知道如何在Vapor 3中使用url查询参数.我似乎无法在文档中找到任何内容.
例如/objects?fancy=true,我如何访问fancy参数.
我使用URLSearchParmasAPI构建了一个带有查询参数的 oauth2 url 。但是,输出 URL 没有返回预期的 URL。任何人都可以帮助我理解这两个API之间的差异,我怎么能得到相同的结果的输出encodeURIComponent,使用URLSearchParams?谢谢!
const expected = encodeURIComponent('code id_token'); // code%20id_token
const search = new URLSearchParams();
search.set('response_type', 'code id_token');
search.toString(); // code+id_token
Run Code Online (Sandbox Code Playgroud) query-parameters ×10
url ×2
asp.net-mvc ×1
c# ×1
conventions ×1
ember.js ×1
http ×1
http-status ×1
javascript ×1
middleware ×1
oauth-2.0 ×1
php ×1
postgresql ×1
rest ×1
ruby ×1
sql-like ×1
sqlite ×1
swagger ×1
swagger-ui ×1
swift ×1
vapor ×1