我在JavaScript中有以下包含过滤器选项的复杂对象
var filter={caseIdentifiter:'GFT1',userID:'2'};
我想传递给 ASP.NET MVC4 WebApi 控制器 GET
[HttpGet]
public IEnumerable<JHS.Repository.ViewModels.CaseList> Get([FromBody]Repository.InputModels.CaseListFilter filter)
{
try
{
return Case.List(filter);
}
catch (Exception exc)
{
//Handle exception here...
return null;
}
}
使用jQuery ajax调用
var request = $.ajax({
url: http://mydomain.com/case,
type: 'GET',
data: JSON.stringify(filter),
contentType: 'application/json; charset=utf-8',
cache: false,
dataType: 'json'
});
ASP。NET控制器方法为“null”。如果我将其更改为POST,则过滤器对象将正确传递。有没有方法将复杂对象传递给GET?
我不想分离出URL的参数,因为会有很多参数,这会使它效率低下,很难有可选的参数,这样即使添加了新参数,方法签名也保持不变。
如果您将json数据附加到查询字符串,然后在web api端解析它。您可以解析复杂对象。这比post json对象样式有用。这是我的解决方案。
//javascript file
var data = { UserID: "10", UserName: "Long", AppInstanceID: "100", ProcessGUID: "BF1CC2EB-D9BD-45FD-BF87-939DD8FF9071" };
var request = JSON.stringify(data);
request = encodeURIComponent(request);
doAjaxGet("/ProductWebApi/api/Workflow/StartProcess?data=", request, function (result) {
window.console.log(result);
});
//webapi file:
[HttpGet]
public ResponseResult StartProcess()
{
dynamic queryJson = ParseHttpGetJson(Request.RequestUri.Query);
int appInstanceID = int.Parse(queryJson.AppInstanceID.Value);
Guid processGUID = Guid.Parse(queryJson.ProcessGUID.Value);
int userID = int.Parse(queryJson.UserID.Value);
string userName = queryJson.UserName.Value;
}
//utility function:
public static dynamic ParseHttpGetJson(string query)
{
if (!string.IsNullOrEmpty(query))
{
try
{
var json = query.Substring(7, query.Length - 7); //seperate ?data= characters
json = System.Web.HttpUtility.UrlDecode(json);
dynamic queryJson = JsonConvert.DeserializeObject<dynamic>(json);
return queryJson;
}
catch (System.Exception e)
{
throw new ApplicationException("can't deserialize object as wrong string content!", e);
}
}
else
{
return null;
}
}
找到这个StackOverflow问题/答案后
复杂类型在ApiControl ler参数中为null
控制器方法上的[FromBody]属性需要为[FromUri],因为GET没有正文。更改后,“过滤器”复杂对象将正确传递。
我正在开发将复杂数据从window.open()传递到MVC Controller action方法参数的javascript功能。我能够通过构建查询字符串并从控制器中的[FromQuery]检索它们来实现它。 但我的问题是,我想将数据作为模型对象传递。在窗户里可以吗。打开() 下面是我的javascript代码 如您所见,我可以在URL中传递数据,但它似乎是公开的。那么,有没有办法传入var u
问题内容: 我在JavaScript中有以下复杂对象,其中包含过滤器选项 我想传递给ASP.NET MVC4 WebApi控制器GET 使用jQuery ajax调用 ASP.NET控制器方法中的“过滤器”对象为“空”。如果我将其更改为POST,则过滤器对象将正确传递。有没有办法将复杂的对象传递给GET? 我不想将参数分离到URL,因为会有许多参数使效率低下,很难拥有可选参数,并且即使添加了新参数
问题内容: 我已经成功地建立了一个快速测试,以创建一个“类似REST的”服务,该服务返回序列化为JSON的对象,并且这非常容易且快速(基于本文)。 但是,虽然返回桃子一样的JSON格式的对象很容易,但我还没有看到任何处理非原语输入参数的示例。如何传递复杂的对象作为参数?我正在使用Apache CXF,但也欢迎使用其他框架(例如杰克逊)的示例:) 客户端可能类似于构建javascript对象,将其传
我在示例中看到如何将消息字符串传递给亚马逊 sns sdk 的发布方法。但是,是否有如何将自定义对象作为消息传递的示例?我尝试将“消息结构”设置为“json”,但随后我得到错误。我应该将对象值传递到参数中的哪个位置? 有什么例子吗?
问题内容: 我想将一个对象传递给控制器,并在控制器中检索值。我定义如下: HTML代码: Javascript: 但是我无法在控制器中检索值。它越来越空。 问题答案: 尝试以下操作:-您正在传递对象数组,因此您应该执行HTTPPost而不是HttpGet(这将适用于通过查询字符串发送它的原始类型数组,例如int,strgin等列表)(请记住查询字符串的限制)。尝试使用HTTPPost
根据本指南,我能够将简单数据类型(如)的关联数组传递给PL/SQL过程。 可以这么说: 但是,我想调用下面的过程,取而代之的是复杂类型。 我尝试过各种方法,比如: 以下是失败的: 看起来您可以在包之外创建一个类型并引用它。 引用它: 但是,您不允许在包之外创建关联数组的RECORD。我可以用对象替换RECORD,但是我想不出任何东西可以替换关联数组,这是cx_Oracle可以传入或传出的唯一集合类