C# 如何将对象(类)传递给Rest服务
在我的休息服务中,我有以下几点: 资产控制员:C# 如何将对象(类)传递给Rest服务,c#,rest,C#,Rest,在我的休息服务中,我有以下几点: 资产控制员: // GET: <AssetController> [HttpGet("{companyID}/{machineName}")] public Asset Get(int companyID, string machineName) { Database db = new Database(configuration.ConnectionString); //DataSet ds = db.executeFunctio
// GET: <AssetController>
[HttpGet("{companyID}/{machineName}")]
public Asset Get(int companyID, string machineName)
{
Database db = new Database(configuration.ConnectionString);
//DataSet ds = db.executeFunctionSelect("fngetallassets2()");
DataSet ds = db.executeViewSelect("tblasset where LOWER(name) = '" + machineName.ToLower() + "'");
//DataSet ds = db.executeDataSetProc("getallassets", null);
DataTable table = ds.Tables[0];
DataRow row = table.Rows[0];
Asset asset = new Asset
{
ID = int.Parse(row["ID"].ToString()),
CompanyID = int.Parse(row["Company_ID"].ToString()),
Name = row["Name"].ToString(),
IPAddress = row["IP_Address"].ToString(),
CreateDate = DateTime.Parse(row["Create_Date"].ToString()),
IsActive = bool.Parse(row["Is_Active"].ToString())
};
return asset;
}
//获取:
[HttpGet(“{companyID}/{machineName}”)]
公共资产获取(int companyID,string machineName)
{
Database db=新数据库(configuration.ConnectionString);
//数据集ds=db.executeFunctionSelect(“fngetallassets2()”);
数据集ds=db.executeViewSelect(“tblasset,其中LOWER(name)='”+machineName.ToLower()+“”;
//数据集ds=db.executeDataSetProc(“getallassets”,null);
DataTable=ds.Tables[0];
DataRow row=表。行[0];
资产=新资产
{
ID=int.Parse(行[“ID”].ToString()),
CompanyID=int.Parse(行[“Company_ID”].ToString()),
名称=行[“名称”]。ToString(),
IPAddress=行[“IP_地址”]。ToString(),
CreateDate=DateTime.Parse(行[“创建日期”].ToString()),
IsActive=bool.Parse(行[“是活动的”].ToString())
};
归还资产;
}
这个很好用。。。这就是我需要帮助的地方
// PUT /<AssetController>/5
// Insert record into the database
[HttpPut("{asset}")]
public void Put([FromBody] string asset)
{
Database db = new Database(configuration.ConnectionString);
db.executeNonQuery("sp_AssetInsert", null);
}
//PUT//5
//将记录插入数据库
[HttpPut(“{asset}”)]
公共作废认沽权([FromBody]字符串资产)
{
Database db=新数据库(configuration.ConnectionString);
db.executeNonQuery(“sp_AssetInsert”,null);
}
在这里,我试图通过(不知何故)相同的资产类别
在调用windows窗体中,我使用这种方式调用PUT方法:
public void InsertAsset(Asset asset)
{
ArrayList parameters = new ArrayList
{
asset.Name,
asset.IPAddress
};
RestClient client = new RestClient("https://localhost:5001/Asset/");
RestRequest request = new RestRequest(Method.PUT);
request.AddJsonBody(asset);
IRestResponse<List<string>> response = client.Execute<List<string>>(request);
if (response.StatusCode == HttpStatusCode.OK)
{
}
public void InsertAsset(资产)
{
ArrayList参数=新建ArrayList
{
资产名称,
asset.IPAddress
};
RestClient=新的RestClient(“https://localhost:5001/Asset/");
RestRequest请求=新的RestRequest(Method.PUT);
请求.AddJsonBody(资产);
IRestResponse response=client.Execute(请求);
if(response.StatusCode==HttpStatusCode.OK)
{
}
我在Response.StatusCode=unsupportedmedia或类似的内容时出错。
我需要知道如何序列化或以某种方式传递类或它的JSON字符串或其他
有人能帮我弄清楚如何调用PUT方法吗,因为我有几十种方法要做。传递参数有几种方法:
[HttpPut(“{paramaters}”)中指定路由时
您正在指定选项1。您可以在参数上使用FromBody
和FromUrl
属性来控制此操作。数字和字符串等简单参数通常是URL的一部分,而资产等复杂对象可能更容易在主体中传递
另见
以下是用于执行此操作的呼叫和接收代码
电话:
RestClient client = new RestClient("https://localhost:5001/Asset/");
RestRequest request = new RestRequest(Method.PUT);
request.AddJsonBody(asset); <-- Asset is a class object
RestResponse response = (RestResponse)client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK)
{
}
RestClient=newrestclient(“https://localhost:5001/Asset/");
RestRequest请求=新的RestRequest(Method.PUT);
request.AddJsonBody(资产);您可能应该在请求正文中发送参数,而不是作为路由参数。第二,正如@SBFrancies所说,资产不应该在您的路径中。如果您必须在您的路径中包含资产对象,您需要对其进行Base64编码,以使URL有效。但请将资产负载放在您的请求正文中。OT:in除了ToString后跟Parse,您可能还可以直接将这些行值转换为intAsset Asset
?但不要将实体框架实体用作DTO,将数据库与API分离。资产是一个类对象,而不是实体…我传递类对象以获取和保存数据。我想了解有关如何传递资产对象的更多信息:以下是我尝试传递资产对象RestClie的代码nt客户端=新RestClient(“);RestRequest请求=新的RestRequest(Method.PUT);request.AddHeader(“Accept”,“application/json”);request.AddJsonBody(asset);restreponse响应=(restreponse)client.Execute(请求);if(response.StatusCode==HttpStatusCode.OK){}我已经更新了上面文本中的代码。
// PUT /<AssetController>/5
// Insert record into the database
[HttpPut]
public void Put([FromBody] Asset asset)
{
Database db = new Database(configuration.ConnectionString);
db.executeNonQuery("sp_AssetInsert", null);
}