我正在开发一个REST API,它们分享了大部分行为,比如简单的GET PUT POST DELETE。
有很多类,因此我决定使用约束创建空接口和泛型方法来管理其所有功能。
它的外观示例:
界面
public interface IGetByOwner
{
}
班级
public class Customer : IGetByOwner
{
public int OwnerID {get;set;}
}
助手
public class LTHttpClient
{
public static async Task<HttpResponseMessage> GetByOwner<T>(int ownerId)
where T : IGetByOwner
{
var uri = $"{LTContext.apiRoot}/{typeof(T).Name}?ownerId={ownerId}";
return await SendRequest(new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new System.Uri(uri)
});
}
}
Http GET
var response = await LTHttpClient.GetByOwner<Customer>(Owner.Id);
这可以按预期工作。问题是其他Http方法。
Http POST
var response = await LTHttpClient.GetByOwner<Customer>(Owner.Id);
这会抛出异常消息:
System.MissingMethodException: 'Method not found:
'System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage>
LeafyTracker_PCL.LTHttpClient.Post(!!0)'.'
此代码(所有事务)在PCL .NET Standard 2.0上运行,同时在WinForm项目上调用方法 我做错了什么?
更新01/06/2018
这个问题似乎是某个地方图书馆的旧参考 但是,我已经清理了解决方案,删除bin文件夹并重建所有内容,但仍然抛出了异常。有什么建议吗?
答案 0 :(得分:0)
您是否查看了其他帖子,我在Polity上找到了这个答案:https://stackoverflow.com/a/8059594/4794396 PS:不能发表评论,因为我还没有50个声誉,因此,答案!
更新:包括来自链接答案的关键点... 某处可能存在残留的旧版本DLL。根据Ladenedge对上述答案的评论,可能是因为GAC的版本较旧。
答案 1 :(得分:0)
我通过将包含接口的PCL中的所有内容复制到新的内容中,并更改了最新的所有引用来解决这个问题。