[英]How to hit a rest api url from asp.net MVC 5
实际上,我想输入一个网址(如果我从浏览器中输入了相同的网址,则短信会显示我的电话号码,而不是代码中的密码),以便在手机上发送短信。 相同的代码在C#Windows应用程序中对我有用,但是在mvc中,它却给出错误,因为异常[ 目前无法启动异步操作。 异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。 如果在执行页面时发生此异常,请确保该页面被标记为<%@ Page Async =“ true”%>。 此异常也可能表示尝试调用“异步无效”方法,ASP.NET请求处理通常不支持该方法。 而是,异步方法应返回一个Task,而调用者应等待它。 ]
void sendSMS(string name, string mobile)
{
try
{
string mobNumber = mobile;
string message = "Hello "+name+" your request submitted successfully.";
string apiToken = "xxxxxxxxxxx";
string smsSender = "xxxxxx";
string apiKey = "test@gmail.com";
string url = "http://somewebsite.com/Restapis/send_sms?api_key=" + apiKey + "&api_token=" + apiToken + "&sender=" + smsSender + "&receiver=" + mobNumber + "&msgtype=1&sms=" + message + "";
GetRequest(url, mobNumber);
}
catch(Exception ex){ }
}
public async static void GetRequest(string url, string mob)
{
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
HttpContentHeaders headers = content.Headers;
if (response.ReasonPhrase == "OK") { }
}
}
}
}
上面的相同代码在Windows App中工作,但在ASP.NET MVC中工作。
请任何人提供提示或解决方案。 提前致谢。
这是ASP.NET中的一个已知问题。
替换此行:
using (HttpResponseMessage response = await client.GetAsync(url))
有了这个:
using (HttpResponseMessage response = await client.GetAsync(url).ConfigureAwait(false))
您需要使用ConfigureAwait
否则线程将阻塞。
检查此帖子以获取更多详细信息。
因此,根据它,ASP.NET具有专门的同步上下文,只有一个线程可以拥有。 而且,如果您不使用.ConfigureAwait(false),它将尝试恢复旧的上下文,该上下文属于被.Result阻止的主线程,从而导致死锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.