RestSharp在ASP.NET WebForm返回Null,控制台正常问题解决
RestSharp POST请求在ASP.NET WebForms中返回Null,.NET Core控制台程序却正常运行
我用Visual Studio 2019开发了一个.NET Core控制台程序,通过RestSharp发起POST请求可以正常获取数据并写入SQL Server,但把相同代码移植到ASP.NET WebForms项目(基于.NET Framework)时,却收到了Null响应,完全无法获取数据,恳请大家帮忙排查问题!
控制台程序(正常运行)代码:
using RestSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Data; using System.Data.SqlClient; namespace RetailerUrlStatusChecker { public class Program { static async Task Main(string[] args) { await ProcessRepositories(); } private static async Task ProcessRepositories() { var client = new RestClient("https://api-developer.com/products"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Accept", "application/json"); request.AddParameter("application/json", "{\"category\": \"all\"}", ParameterType.RequestBody); var response2 = await client.ExecuteTaskAsync<List>(request); List products= response2.Data; //INSERT DATA INTO DB SQL SERVER string connectionString = "Data Source=utente-pc\\SQLEXPRESS;Initial Catalog=MYDB;Persist Security Info=True;User ID=user;Password=sa"; SqlConnection connection = new SqlConnection(connectionString); try { SqlCommand cmd = new SqlCommand("INSERT INTO PRODUCT (code, name, description) VALUES (@code, @name, @description)", connection); cmd.Parameters.AddWithValue("@code", products.code); cmd.Parameters.AddWithValue("@name", products.name); cmd.Parameters.AddWithValue("@description", products.description); connection.Open(); cmd.ExecuteNonQuery(); } catch { //Label4.Text = "uh oh"; } } } public class List { public string code{ get; set; } public string name{ get; set; } public string description{ get; set; } } }
ASP.NET WebForms(返回Null)代码:
我已经在<%@ Page指令中设置了Async="true",代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using RestSharp; using System.Data; using System.Data.SqlClient; using System.Threading.Tasks; namespace WebApplication2 { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { RegisterAsyncTask(new PageAsyncTask(GetGizmosSvcAsync)); } public async Task GetGizmosSvcAsync() { var client = new RestClient("https://api-developer.com/products"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Accept", "application/json"); request.AddParameter("application/json", "{\"category\": \"all\"}", ParameterType.RequestBody); var response2 = await client.ExecuteTaskAsync<List>(request); List products= response2.Data; //INSERT DATA INTO DB SQL SERVER string connectionString = "Data Source=utente-pc\\SQLEXPRESS;Initial Catalog=MYDB;Persist Security Info=True;User ID=user;Password=sa"; SqlConnection connection = new SqlConnection(connectionString); try { SqlCommand cmd = new SqlCommand("INSERT INTO PRODUCT (code, name, description) VALUES (@code, @name, @description)", connection); cmd.Parameters.AddWithValue("@code", products.code); cmd.Parameters.AddWithValue("@name", products.name); cmd.Parameters.AddWithValue("@description", products.description); connection.Open(); cmd.ExecuteNonQuery(); } catch { //Label4.Text = "uh oh"; } } } public class List { public string code{ get; set; } public string name{ get; set; } public string description{ get; set; } } }
API响应Schema:
{ "code": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" } }
更新:问题已解决!
我在论坛上了解到新版RestSharp和.NET Framework存在兼容性问题。仔细对比后发现,我的控制台程序用的是.NET Core,而WebForms项目用的是.NET Framework,两者的NuGet包环境有差异。
于是我重新创建了WebForms项目,安装了RestSharp v106.1.0版本(之前用的是v106.10.1),现在代码可以正常运行了!原来代码本身没有问题,问题出在RestSharp的版本兼容性上。
感谢大家的帮助,给大家添麻烦了!
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

