我做了一个请求做一个asp.netwebapi后方法,我不能够得到一个请求变量。
要求
jQuery.ajax({ url: sURL, type: 'POST', data: {var1:"mytext"}, async: false, dataType: 'json', contentType: 'application/x-www-form-urlencoded; charset=UTF-8' })
.done(function (data) {
...
});
WEB API Fnx
[AcceptVerbs("POST")]
[ActionName("myActionName")]
public void DoSomeStuff([FromBody]dynamic value)
{
//first way
var x = value.var1;
//Second way
var y = Request("var1");
}
我无法通过两种方式获得var1内容。。。(除非我为此创建了一个类)
我该怎么做?
我搜索了整个上午,找到了一个描述客户端和服务器代码的答案,然后终于找到了答案。
简要介绍-UI是一个实现标准视图的MVC 4.5项目。服务器端是MVC 4.5 WebApi。目标是将模型作为JSON发布,并随后更新数据库。我的责任是编写UI和后端。下面是代码。这对我有用。
模型
public class Team
{
public int Ident { get; set; }
public string Tricode { get; set; }
public string TeamName { get; set; }
public string DisplayName { get; set; }
public string Division { get; set; }
public string LogoPath { get; set; }
}
客户端(UI控制器)
private string UpdateTeam(Team team)
{
dynamic json = JsonConvert.SerializeObject(team);
string uri = @"http://localhost/MyWebApi/api/PlayerChart/PostUpdateTeam";
try
{
WebRequest request = WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
WebResponse response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
catch (Exception e)
{
msg = e.Message;
}
}
服务器端(WebApi控制器)
[Route("api/PlayerChart/PostUpdateTeam")]
[HttpPost]
public string PostUpdateTeam(HttpRequestMessage context)
{
var contentResult = context.Content.ReadAsStringAsync();
string result = contentResult.Result;
Team team = JsonConvert.DeserializeObject<Team>(result);
//(proceed and update database)
}
WebApiConfig(路线)
config.Routes.MapHttpRoute(
name: "PostUpdateTeam",
routeTemplate: "api/PlayerChart/PostUpdateTeam/{context}",
defaults: new { context = RouteParameter.Optional }
);
在这个问题上我思考了一会儿,尝试了许多不同的东西后,我最终在API服务器上放置了一些断点,发现请求中塞满了键值对。在我知道它们在哪里后,很容易就能找到它们。但是,我只发现这个方法可以与WebClient一起工作。上传。然而,它确实很容易工作,允许您加载尽可能多的参数,并非常容易地在服务器端访问它们。请注意,我的目标是. net 4.5。
// Client request to POST the parameters and capture the response
public string webClientPostQuery(string user, string pass, string controller)
{
string response = "";
string parameters = "u=" + user + "&p=" + pass; // Add all parameters here.
// POST parameters could also easily be passed as a string through the method.
Uri uri = new Uri("http://localhost:50000/api/" + controller);
// This was written to work for many authorized controllers.
using (WebClient wc = new WebClient())
{
try
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
response = wc.UploadString(uri, login);
}
catch (WebException myexp)
{
// Do something with this exception.
// I wrote a specific error handler that runs on the response elsewhere so,
// I just swallow it, not best practice, but I didn't think of a better way
}
}
return response;
}
服务器端
// In the Controller method which handles the POST request, call this helper:
string someKeyValue = getFormKeyValue("someKey");
// This value can now be used anywhere in the Controller.
// Do note that it could be blank or whitespace.
// This method just gets the first value that matches the key.
// Most key's you are sending only have one value. This checks that assumption.
// More logic could be added to deal with multiple values easily enough.
public string getFormKeyValue(string key)
{
string[] values;
string value = "";
try
{
values = HttpContext.Current.Request.Form.GetValues(key);
if (values.Length >= 1)
value = values[0];
}
catch (Exception exp) { /* do something with this */ }
return value;
}
有关如何处理多值请求的更多信息。形成键/值对,请参见:
http://msdn.microsoft.com/en-us/library/6c3yckfw(v=vs.110)。aspx
第一种方式:
public void Post([FromBody]dynamic value)
{
var x = value.var1.Value; // JToken
}
请注意,值。属性
实际上返回一个JToken
实例,因此要获取它的值,需要调用value。所有物值
。
第二种方式:
public async Task Post()
{
dynamic obj = await Request.Content.ReadAsAsync<JObject>();
var y = obj.var1;
}
以上两项都是用小提琴演奏的。如果第一个选项不适用,请尝试将内容类型设置为application/json
,以确保使用JsonMediaTypeFormatter
对内容进行反序列化。
问题内容: 在我的数据库中,我具有NextStatDistanceTime值作为浮点数。执行“ ”行时,出现错误 系统无效的强制转换异常 如何在此代码中从sql命令获取浮点值? 这是我的代码: 问题答案: 我想是时候放一张桌子了。 T-SQL类型名称 相当于.NET C#类型名称 `DataReader` 方法 `FLOAT` `System.Double` `double` `IDataRead
我正在使用Apache Jena查询DBpedia以获得特定主题的Wikipedia URL。 所以我使用 一个示例页面是http://dbpedia.org/page/chicago_cubs
我想知道那些每天都涨价的水果的名字。所以产量应该是“苹果”,因为苹果的价格在3月1日是15,3月2日是16,3月3日是17...............................................请任何人给我建议。
我正在使用c#、SpecFlow和Selenium进行BDD测试。我想创建方法来单击按钮。此按钮的名称应取自参数(字符串p0),如下所示: 使用XPath,我只能做到这一点: 但我想做更多类似的事情: 司机。FindElement(By.名称(p0))。单击(); 或 驾驶员FindElement(By.XPath(“//a[contains(,p0)]”)。单击(); 我不知道如何让它工作:(
我已经成功地从IBM沃森助理Api获取数据,使用他们的ASP. NET SDK(它配备了助手功能),但使用响应。用数据写打印出数据为字符串,而不是json。 我尝试过的其他SDK是NodeJs和Python,对于NodeJs,我都在浏览器和控制台上打印出来,仅在控制台上打印Python,这三种情况下,数据已正确打印为json,例如,这是Python中记录的一些数据: 有人知道我为什么会有这个问题吗
问题内容: 我正在使用此Ajax代码。但是我不知道如何使用Javascript在服务器端的asp上检索value1的值。 在我的服务器端,我想要类似<%var newdata = value1(这是服务器端的一个-已发送到此处)%> 请帮忙 !!!太感谢了 我知道PHP可以实现,但如何使用javascript 问题答案: 当您的Ajax-Request成功时,您将在Request-Object的Q