【发布时间】:2021-03-14 19:26:15
【问题描述】:
我试图不重复代码,所以我创建了一个参数化的 CreateFile 方法。 它的参数之一 myParams 有时可以是 CustomObject_A 类型,而有时它可以是 CustomObject_B 类型。那么我该如何实现呢?
代码下方:
public class CustomObject_A {
public DataTable dt { get; set; }
public string prop1 { get; set; }
}
public class CustomObject_B {
public List<AnotherCustomObject> lst { get; set; }
public int prop2 { get; set; }
}
public void DoWork_CreateFile_A(string baseUrl)
{
string requestUri = "api/MyController/CreateFile_A";
CustomObject_A myParams = new CustomObject_A();
this.CreateFile(baseUrl, requestUri, myParams);
}
public void DoWork_CreateFile_B(string baseUrl)
{
string requestUri = "api/MyController/CreateFile_B";
CustomObject_B myParams = new CustomObject_B();
this.CreateFile(baseUrl, requestUri, myParams);
}
public async Task CreateFile(string strBaseUrl, string requestUri, someType myParams)
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(strBaseUrl);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
string stringMyParams = await Task.Run(() => JsonConvert.SerializeObject(myParams, Newtonsoft.Json.Formatting.Indented,JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }));
var httpContent = new StringContent(stringMyParams, Encoding.UTF8, "application/json");
HttpResponseMessage res = await client.PostAsync(requestUri, httpContent);
if (res.IsSuccessStatusCode)
{
// Do things
}
}
}
Web API 控制器:
public class MyController : ApiController
{
public bool CreateFile_A(string data)
{
CustomObject_A myData = JsonConvert.DeserializeObject<CustomObject_A>(data);
// Do some stuff here
}
public bool CreateFile_B(string data)
{
CustomObject_B myData = JsonConvert.DeserializeObject<CustomObject_B>(data);
// Do some stuff here
}
}
【问题讨论】:
-
由于您没有在
CreateFile中使用myParams的任何类型特定成员,您可以简单地使用object作为myParams的类型
标签: c# asp.net-mvc asp.net-web-api async-await