使用标准路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
通过这些行动:
public class ValuesController : ApiController
{
// GET api/values
public string GetAll()
{
return "all";
}
// GET api/values/5
public string GetById(int id)
{
return "single";
}
// GET api/values?ids=1&ids=2
public string GetByIds([FromUri] int[] ids)
{
return "multiple";
}
Run Code Online (Sandbox Code Playgroud)
并向/ api/values发出请求,我得到以下异常:
Multiple actions were found that match the request:
System.String GetAll() on type MvcApplication4.Controllers.ValuesController
System.String GetByIds(Int32[]) on type MvcApplication4.Controllers.ValuesController
Run Code Online (Sandbox Code Playgroud)
我一直在试着寻找解决方案.我相信GetAll和GetByIds …
我正在尝试将控制器操作绑定到接口,但仍然保持默认绑定行为.
public class CoolClass : ISomeInterface
{
public DoSomething {get;set;} // ISomeInterface
}
public class DosomethingController : ApiController
{
public HttpResponseMessage Post(ISomeInterface model)
{
// do something with model which should be an instance of CoolClass
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务的消费者对CoolClass一无所知,所以让他们为他们正在传递的Json添加"$ type"在我看来是个黑客.我希望能够在服务中处理它.如果我将CoolClass指定为动作参数,它可以正常工作.
编辑:所以我发现我的问题的部分解决方案在这里为ASP.NET Web API操作方法参数的依赖注入,但有一个后续问题.该解决方案无法解析接口属性.请参阅下面的示例.
IConcreteClass将被解析,但ISubtype不会.
public class SubConcreteClass : ISubtype
{
// properties
}
public class ConcreteClass : IConcreteClass
{
public ISubtype Subtype {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
一旦媒体格式化程序看到它可以解析IConcreteClass中的类型,它就会读取整个流.所以我猜我没有机会解决界面成员.
在我在WSS中的自定义aspx页面中,我使用带有xsl文件的DataFormWebPart来呈现一些数据.为了将值传递给xsl,我使用参数绑定.具体来说,我需要传递服务器主机URL,如下所示:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue="http://hardcoded.com" />
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我要做的下一件事是动态获取主机名.因此,弄清楚如何从SharePoint获取它我添加了以下绑定:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue='<%# SPContext.Current.Site.Url.Replace
(SPContext.Current.Site.ServerRelativeUrl, "") %>' />
Run Code Online (Sandbox Code Playgroud)
现在来问题了.如果在页面中使用其他位置,代码将按预期工作,但使用上述代码SharePoint报告:
Web部件错误:'WebPartPages:DataFormWebPart'的'ParameterBindings'属性不允许子对象.
有人对此有所了解吗?
更新:我已根据本文启用了服务器端代码
我有一个webApi2项目和另一个项目,其中我有我的Model类和BaseModel,它是所有模型的基础,如下所示,
public class BaseModel
{
public string UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所有其他模型都是从我的BaseModel派生的.
在webapi我有我的CustomerController如下,
public class CustomerController : ApiController
{
[HttpPost]
public GetCustomerResponseModel Get(GetCustomerRequestModel requestModel)
{
var response = new GetCustomerResponseModel();
//I need only the UserId coming from the BaseModel is binded from request headers
var userId = requestModel.UserId;
//I want all model data except UserId is binded with default model binding
var customerData = requestModel.CustomerData;
var someOtherData = requestModel.SomeOtherData;
return response;
}
[HttpPost]
public AddStockAlertResponseModel AddStockAlert(AddStockAlertRequestModel requestModel)
{ …Run Code Online (Sandbox Code Playgroud) model-binding parameterbinding custom-model-binder asp.net-web-api asp.net-web-api2
我有这个PowerShell cmdlet:
function Test-ParameterBinding {
#
# .SYNOPSIS
# Tests parameter binding.
#
[CmdletBinding()]
param (
[Parameter(ParameterSetName = 's1', Mandatory = $true)]
[int] $P1,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's2', Mandatory = $true)]
[string] $P2,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's3', Mandatory = $true)]
[bool] $P3
)
process { $PSCmdlet }
}
Run Code Online (Sandbox Code Playgroud)
以下是此cmdlet的帮助:
SYNTAX
Test-ParameterBinding -P1 <Int32> [-P2 <String>] [-P3 <Boolean>] [<Com…
Test-ParameterBinding -P2 <String> [<CommonParameters>]
Test-ParameterBinding -P3 <Boolean> [<CommonParameters>]
Run Code Online (Sandbox Code Playgroud)
查看代码和帮助我认为我可以像这样使用cmdlet:
Test-ParameterBinding -P2 'Bind to param set s2'
Test-ParameterBinding -P3 …Run Code Online (Sandbox Code Playgroud) 我需要额外的一双眼睛.任何帮助将不胜感激.这是一个非常简单的搜索查询,但无论出于何种原因,我找不到该错误.好吧,我知道bug在哪里.我只是无法超越它.无论如何.....
我从POST变量中获取搜索值,设置该变量,然后按如下方式设置列变量...
$term = "'%".$_POST['searchTerm']."%'";
$field = "columnName";
Run Code Online (Sandbox Code Playgroud)
当我回应这些时,它们会完美地出现.因此,如果我在表单中键入"a",我将回显'%a%'和columnName.
然后我准备查询并绑定参数如下...
$suquery=$dbCon->prepare("select * from Table where ? LIKE ?");
$suquery->bind_param('ss', $field, $term);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
结果总是返回0行.我发现,当我玩这个时,没有绑定参数正常工作,即使它应该如此回应.例如,当我更改查询以便列被硬编码并且仅绑定搜索项时....
$suquery=$dbCon->prepare("select * from Table where columnName LIKE ?");
$suquery->bind_param('s', $term);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
我仍然得到零返回的行.这告诉我,即使$ field回声为'%a%',某些东西仍然没有关闭.我真的很茫然.同样,当我硬连接搜索词并绑定列时......
$suquery=$dbCon->prepare("select * from Table where ? LIKE '%a%'");
$suquery->bind_param('s', $field);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
我得到了太多的行返回.它实际上从表中拉出行,其中任何列中的值包含字母"a".因此,列或术语都没有正确绑定.劳动节!
我听说使用绑定变量(可以)更有效,因为对于具有不同绑定值的后续调用,查询本身仍然相同,因此不再需要对其进行解析。
我理解为什么固定值会出现这种情况。在下面的游标中,该值固定为 1。如果我有一个相同的不同游标,除了 1 变为 2,这是一个不同的查询。清到此为止。
declare
cursor C_CURSOR is
select * from TESTTABLE pt where pt.ID = 1;
Run Code Online (Sandbox Code Playgroud)
但我想知道在游标内使用 PL/SQL 变量时是否也是这种情况。它们是否被扩展为一个固定值,或者它们是否被解释为绑定变量。
我已经进行了广泛的搜索,但到处都可以找到有关文字的示例,如上述情况,但没有明确解释 PL/SQL 变量的使用。
换句话说,在下面的两个片段中,第二个可能更有效,还是它们本质上相同?
直接在游标中使用 PL/SQL 变量:
declare
V_TEST integer := 1;
cursor C_CURSOR is
select *
from
TESTTABLE pt
where
pt.ID = V_TEST;
begin
for r in C_CURSOR loop
null;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
使用绑定变量:
declare
V_TEST int := 1;
cursor C_CURSOR(B_TEST int) is
select *
from
TESTTABLE pt
where
pt.ID = B_TEST;
begin
for r …Run Code Online (Sandbox Code Playgroud) 我正在学习PowerShell并且对参数绑定有疑问.这可能是一个简单的问题,但我很茫然.
如果我输入:
get-adcomputer -filter 'name -eq "serverone"' |
select @{name='computername';e={$_.name}} |
get-process
Run Code Online (Sandbox Code Playgroud)
这给了我一个关于"serverone"的进程列表,并且运行正常.但如果我输入:
get-adcomputer -filter 'name -eq "serverone"' |
select @{name='computername';e={$_.name}} |
get-service
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
get-service : Cannot find any service with service name
'@{computername=SERVERONE}'. At line:1 char:93
+ ... e={$_.name}} | get-service
+ ~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (@{computername=SERVERONE}:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Run Code Online (Sandbox Code Playgroud)
为什么是这样?双方Get-Process并Get-Service接受计算机名,以及该参数的帮助文件看起来相同.有趣的是,如果我键入相同的代码但添加-Name bits到Get-Service上面的命令,它会返回服务详细信息.所以它看起来像是Get-Service试图将对象绑定到服务名称,但是这种情况Get-Process在语法上看起来非常相似?
我正在尝试将相同的值绑定到原始查询中的某个参数(Laravel 5.2)
//this is a non practical example ,only for clarify the question
DB::table('users as u')
->select('id')
->whereRaw('u.id > ? or u.id < ? or u.id = ?',[2,2,2])
->first();
Run Code Online (Sandbox Code Playgroud)
有没有办法一次绑定相同的参数(防止重复[2,2,2]中的值)?
我有以下原始查询:
$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
FROM `visited`
WHERE created_at >= DATE_SUB(NOW(),INTERVAL 16 DAY)
GROUP BY HOUR(created_at)") );
Run Code Online (Sandbox Code Playgroud)
我需要参数化日间隔,所以我尝试了这个:
$days = 16;
$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
FROM `visited`
WHERE created_at >= DATE_SUB(NOW(),INTERVAL :days DAY)
GROUP BY HOUR(created_at)", ["days" => $days]) );
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
"SQLSTATE [HY000]:一般错误:2031
显然绑定不起作用.我究竟做错了什么?
我来回上网,找不到解决我问题的方法。我正在尝试使用与jdbc的参数绑定来查询mysql表,但是它在我的语句中始终报告问号的语法错误。
这是我的课:
package todoList_;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
public class testBinding {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/TODO?useJvmCharsetConverters=true";
// Database credentials
static final String USER = "root";
static final String PASS = "root";
public static void main(String args[]) {
// TODO Auto-generated method stub
Connection conn = null;
Statement stmt = null;
HashMap<Integer, String> list = new …Run Code Online (Sandbox Code Playgroud) 我在 Laravel 中的 DB 查询和参数绑定中使用参数时遇到问题。
我收到此错误:
Error: "Column not found: 1054 Unknown column '3' in 'on clause'"
Run Code Online (Sandbox Code Playgroud)
这是查询的一部分:
->join('foo AS f1', function($join) use ($bar)
{
$join->on('f1.foo', '=', 'f2.foo')
->on('f1.bar', '=', $bar);
})
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它会起作用:
->on('f1.bar', '=', DB::raw($bar));
Run Code Online (Sandbox Code Playgroud)
解决这个问题的方法是什么?当然,我也想为此使用参数绑定。但是,当我这样做时:
->on('f1.bar', '=', ':bar', ['bar' => $bar]);
Run Code Online (Sandbox Code Playgroud)
我明白了:
ErrorException in Grammar.php line 196:
Array to string conversion
Run Code Online (Sandbox Code Playgroud) parameterbinding ×12
mysql ×4
php ×4
laravel ×3
c# ×2
powershell ×2
asp.net ×1
asp.net-mvc ×1
binding ×1
cursor ×1
database ×1
java ×1
jdbc ×1
mysqli ×1
octobercms ×1
oracle ×1
plsql ×1
sharepoint ×1
sql-like ×1