Asp.net web api WebApi操作中的JObject参数为null
我有一个api控制器操作,它将JObject作为Asp.net web api WebApi操作中的JObject参数为null,asp.net-web-api,json.net,params,Asp.net Web Api,Json.net,Params,我有一个api控制器操作,它将JObject作为 public class ThemeController : ApiController { [HttpGet] public String Get(String siteName, JObject lessVariables) { public class ThemeController : Controller { [HttpPost] public String Post(String siteNa
public class ThemeController : ApiController
{
[HttpGet]
public String Get(String siteName, JObject lessVariables)
{
public class ThemeController : Controller
{
[HttpPost]
public String Post(String siteName, JObject lessVariables)
{
还有一个ajax调用
$.ajax({
url: '/api/Theme/Get',
data: { lessVariables: JSON.stringify({'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}), siteName: "UnivOfUtah" }
});
$.ajax({
url: '/Theme/Post',
data: { lessVariables: JSON.stringify({'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}), siteName: "UnivOfUtah" }
});
当我查看HttpContext.Current.Request.Params[“lessVariables”]时,它给出了正确的json字符串,但lessVariables是一个空的JObject。我还需要做些什么来设置Json.Net吗
我也在一个常规的控制器操作上尝试过
我有一个控制器操作,它将JObject作为
public class ThemeController : ApiController
{
[HttpGet]
public String Get(String siteName, JObject lessVariables)
{
public class ThemeController : Controller
{
[HttpPost]
public String Post(String siteName, JObject lessVariables)
{
还有一个ajax调用
$.ajax({
url: '/api/Theme/Get',
data: { lessVariables: JSON.stringify({'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}), siteName: "UnivOfUtah" }
});
$.ajax({
url: '/Theme/Post',
data: { lessVariables: JSON.stringify({'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}), siteName: "UnivOfUtah" }
});
相同的结果问题是
小变量
现在是一个字符串。整个结构可能看起来像:
{
"lessVariables": "{'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}",
"siteName": "UnivOfUtah"
}
这就是为什么您可以在参数中看到正确的字符串,但框架无法在不知道它是Json的情况下将其转换为JObject。当您对请求的根对象进行字符串化时,WebApi足够聪明,可以将其作为Json整体处理,但您对其中的值进行了字符串化,因此它不知道应该将其作为Json处理
要修复此问题,您可以使用模型绑定器或自定义操作进行自定义绑定,或者只需将方法更改为:
[HttpGet]
public String Get(String siteName, String lessVariables)
{
JObject jo = JObject.Parse(lessVariables);
更新:
为了让问题更清楚,WebApi可以很好地解析这一点,但是lessVariables
仍然是一个字符串:
[HttpGet]
public String Get(JObject rootObject)
{
// you now have rootObject which has a "siteName" and "lessVariables" parameter
var siteName = rootObject.GetValue("siteName");
var lessVariables = rootObject.GetValue("lessVariables");
// lessVariables.Type would return the JTokenType String
问题是
lessVariables
现在是一个字符串。整个结构可能看起来像:
{
"lessVariables": "{'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}",
"siteName": "UnivOfUtah"
}
这就是为什么您可以在参数中看到正确的字符串,但框架无法在不知道它是Json的情况下将其转换为JObject。当您对请求的根对象进行字符串化时,WebApi足够聪明,可以将其作为Json整体处理,但您对其中的值进行了字符串化,因此它不知道应该将其作为Json处理
要修复此问题,您可以使用模型绑定器或自定义操作进行自定义绑定,或者只需将方法更改为:
[HttpGet]
public String Get(String siteName, String lessVariables)
{
JObject jo = JObject.Parse(lessVariables);
更新:
为了让问题更清楚,WebApi可以很好地解析这一点,但是lessVariables
仍然是一个字符串:
[HttpGet]
public String Get(JObject rootObject)
{
// you now have rootObject which has a "siteName" and "lessVariables" parameter
var siteName = rootObject.GetValue("siteName");
var lessVariables = rootObject.GetValue("lessVariables");
// lessVariables.Type would return the JTokenType String
问题是
lessVariables
现在是一个字符串。整个结构可能看起来像:
{
"lessVariables": "{'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}",
"siteName": "UnivOfUtah"
}
这就是为什么您可以在参数中看到正确的字符串,但框架无法在不知道它是Json的情况下将其转换为JObject。当您对请求的根对象进行字符串化时,WebApi足够聪明,可以将其作为Json整体处理,但您对其中的值进行了字符串化,因此它不知道应该将其作为Json处理
要修复此问题,您可以使用模型绑定器或自定义操作进行自定义绑定,或者只需将方法更改为:
[HttpGet]
public String Get(String siteName, String lessVariables)
{
JObject jo = JObject.Parse(lessVariables);
更新:
为了让问题更清楚,WebApi可以很好地解析这一点,但是lessVariables
仍然是一个字符串:
[HttpGet]
public String Get(JObject rootObject)
{
// you now have rootObject which has a "siteName" and "lessVariables" parameter
var siteName = rootObject.GetValue("siteName");
var lessVariables = rootObject.GetValue("lessVariables");
// lessVariables.Type would return the JTokenType String
问题是
lessVariables
现在是一个字符串。整个结构可能看起来像:
{
"lessVariables": "{'brand-primary': '#222222','brand-success': '#222222','brand-danger': '#222222','brand-info': '#222222','btn-primary-color': '#222222'}",
"siteName": "UnivOfUtah"
}
这就是为什么您可以在参数中看到正确的字符串,但框架无法在不知道它是Json的情况下将其转换为JObject。当您对请求的根对象进行字符串化时,WebApi足够聪明,可以将其作为Json整体处理,但您对其中的值进行了字符串化,因此它不知道应该将其作为Json处理
要修复此问题,您可以使用模型绑定器或自定义操作进行自定义绑定,或者只需将方法更改为:
[HttpGet]
public String Get(String siteName, String lessVariables)
{
JObject jo = JObject.Parse(lessVariables);
更新:
为了让问题更清楚,WebApi可以很好地解析这一点,但是lessVariables
仍然是一个字符串:
[HttpGet]
public String Get(JObject rootObject)
{
// you now have rootObject which has a "siteName" and "lessVariables" parameter
var siteName = rootObject.GetValue("siteName");
var lessVariables = rootObject.GetValue("lessVariables");
// lessVariables.Type would return the JTokenType String
正如我所说的,这篇文章似乎有不同的想法,在你发布的链接中,它是被字符串化的根对象,非常有效。然而,在上面的问题中,它是根对象中的一个值;默认情况下,WebApi框架不会自动解析它,它只会尝试将lessVariables字符串分配给一个没有解析就无法工作的JObject。哦,我明白了。谢谢,我想我会处理这个问题。你也可以尝试删除lessVariables上的JSON.stringify并简单地放入原始JSON,尽管我不确定WebApi是否会自动对正文中的多个参数进行解析。正如我所说,这篇文章似乎不这么认为,在您发布的链接中,它是已字符串化的根对象,非常有效。然而,在上面的问题中,它是根对象中的一个值;默认情况下,WebApi框架不会自动解析它,它只会尝试将lessVariables字符串分配给一个没有解析就无法工作的JObject。哦,我明白了。谢谢,我想我会处理这个问题。你也可以尝试删除lessVariables上的JSON.stringify并简单地放入原始JSON,尽管我不确定WebApi是否会自动对正文中的多个参数进行解析。正如我所说,这篇文章似乎不这么认为,在您发布的链接中,它是已字符串化的根对象,非常有效。然而,在上面的问题中,它是根对象中的一个值;默认情况下,WebApi框架不会自动解析它,它只会尝试将lessVariables字符串分配给一个没有解析就无法工作的JObject。哦,我明白了。谢谢,我想我会处理这个问题。你也可以尝试删除lessVariables上的JSON.stringify并简单地放入原始JSON,尽管我不确定WebApi是否会自动对正文中的多个参数进行解析。正如我所说,这篇文章似乎不这么认为,在您发布的链接中,它是已字符串化的根对象,非常有效。然而,在上面的问题中,它是根对象中的一个值;默认情况下,WebApi框架不会自动解析它,它只会尝试将lessVariables字符串分配给一个没有解析就无法工作的JObject。哦,我明白了。谢谢,我想我会处理这个问题。你也可以尝试删除lessVariables上的JSON.stringify并简单地放入原始JSON,尽管我不确定WebApi是否会自动对正文中的多个参数进行解析。