Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#代码中从客户端调用HttpPost方法_C#_Asp.net Mvc_Http Post - Fatal编程技术网

在C#代码中从客户端调用HttpPost方法

在C#代码中从客户端调用HttpPost方法,c#,asp.net-mvc,http-post,C#,Asp.net Mvc,Http Post,我是MVC和C#的新手,如果这个问题太简单,我很抱歉 对于下面这样的HttpPost控制器,如何直接从用C#编写的客户端程序调用此方法,而无需浏览器(而不是从带有提交按钮的浏览器中的UI表单)?我正在使用.NET4和MVC4 我确信答案在网上,但到目前为止还没有找到。感谢您的帮助 [HttpPost] public Boolean PostDataToDB(int n, string s) { //validate and write to database return fal

我是MVC和C#的新手,如果这个问题太简单,我很抱歉

对于下面这样的HttpPost控制器,如何直接从用C#编写的客户端程序调用此方法,而无需浏览器(而不是从带有提交按钮的浏览器中的UI表单)?我正在使用.NET4和MVC4

我确信答案在网上,但到目前为止还没有找到。感谢您的帮助

[HttpPost]
public Boolean PostDataToDB(int n, string s)
{
    //validate and write to database
    return false;
}

例如,在服务器端使用以下代码:

[HttpPost]
public Boolean PostDataToDB(int n, string s)
{
    //validate and write to database
    return false;
}
您可以使用不同的方法:

使用
网络客户端

using (var wb = new WebClient())
{
    var data = new NameValueCollection();
    data["n"] = "42";
    data["s"] = "string value";
    
    var response = wb.UploadValues("http://www.example.org/receiver.aspx", "POST", data);
}
var request = (HttpWebRequest)WebRequest.Create("http://www.example.org/receiver.aspx");

var postData = "n=42&s=string value";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
using (var client = new HttpClient())
{
    var values = new List<KeyValuePair<string, string>>();
    values.Add(new KeyValuePair<string, string>("n", "42"));
    values.Add(new KeyValuePair<string, string>("s", "string value"));

    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync("http://www.example.org/receiver.aspx", content);

    var responseString = await response.Content.ReadAsStringAsync();
}
使用
HttpRequest

using (var wb = new WebClient())
{
    var data = new NameValueCollection();
    data["n"] = "42";
    data["s"] = "string value";
    
    var response = wb.UploadValues("http://www.example.org/receiver.aspx", "POST", data);
}
var request = (HttpWebRequest)WebRequest.Create("http://www.example.org/receiver.aspx");

var postData = "n=42&s=string value";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
using (var client = new HttpClient())
{
    var values = new List<KeyValuePair<string, string>>();
    values.Add(new KeyValuePair<string, string>("n", "42"));
    values.Add(new KeyValuePair<string, string>("s", "string value"));

    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync("http://www.example.org/receiver.aspx", content);

    var responseString = await response.Content.ReadAsStringAsync();
}
使用
HttpClient

using (var wb = new WebClient())
{
    var data = new NameValueCollection();
    data["n"] = "42";
    data["s"] = "string value";
    
    var response = wb.UploadValues("http://www.example.org/receiver.aspx", "POST", data);
}
var request = (HttpWebRequest)WebRequest.Create("http://www.example.org/receiver.aspx");

var postData = "n=42&s=string value";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
using (var client = new HttpClient())
{
    var values = new List<KeyValuePair<string, string>>();
    values.Add(new KeyValuePair<string, string>("n", "42"));
    values.Add(new KeyValuePair<string, string>("s", "string value"));

    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync("http://www.example.org/receiver.aspx", content);

    var responseString = await response.Content.ReadAsStringAsync();
}
请参见您可以使用的 首先,您应该返回有效的Resultl:

[HttpPost]
public ActionResult PostDataToDB(int n, string s)
{
    //validate and write to database
    return Json(false);
}
之后,您可以使用Web Api客户端库NuGet软件包中的HttpClient类:

public async bool CallMethod()
{
    var rootUrl = "http:...";
    bool result;
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(_rootUrl);
        var response= await client.PostAsJsonAsync(methodUrl, new {n = 10, s = "some string"}); 
        result = await response.Content.ReadAsAsync<bool>();
    }

    return result;
}

如果您决定使用HttpClient实现。不要为每个API调用创建和处置HttpClient。相反,重新使用HttpClient的单个实例。您可以实现声明实例静态或实现单例模式

参考:


如何实现singleton(良好的起点,请阅读该帖子上的评论):

希望下面的代码能帮助您

[ActionName("Check")]
public async System.Threading.Tasks.Task<bool> CheckPost(HttpRequestMessage request)
{
    string body = await request.Content.ReadAsStringAsync();
    return true;
}
[ActionName(“检查”)]
公共异步System.Threading.Tasks.Task CheckPost(HttpRequestMessage请求)
{
string body=wait request.Content.ReadAsStringAsync();
返回true;
}

@Stephen我希望这篇文章可以在C#编写的客户端程序中完成,而不需要浏览器。有可能吗?@Ludovic来自浏览器?真的吗?@RahulSingh引用了一个问题:“来自一个用C#编写的客户端程序,没有浏览器”@RahulSingh OP要求客户端program@Ludovic感谢所有的方法!我花了一段时间才意识到服务器端的参数应该与客户端的参数相匹配。再次感谢@对不起,我没有使用你的参数!我将编辑我的帖子以显示它必须与服务器端参数匹配:)+1用于显示参数名称,如“n”,“s”在客户端和服务器中应该匹配。