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方法吗,因为我有几十种方法要做。

传递参数有几种方法:

  • 作为url路由,即
  • 作为url参数http://localhost:5001/Asset?companyID=42&machineName=companyname
  • 在主体中,通常作为json序列化对象
  • [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);
            }