我创建了一个未映射到模型中任何SQL表的DTO类:
public class FooDTO
{
public int Id { get; set; }
public string Name { get; set; }
}
我在模型中创建了这种类型的实体集:
public override IEdmModel GetModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<FooDTO>("FooDTOs");
// ...
}
并创建了一个自定义控制器:
public class FooDTOsController : ODataController
{
private IDatasourceFactory datasourceFactory;
public FooDTOsController(IDatasourceFactory datasourceFactory)
{
this.datasourceFactory = datasourceFactory;
}
// The GET is working great.
public IHttpActionResult Get()
{
var db = (MyModel)this.datasourceFactory;
IQueryable<FooDTO> foos = db.Set<Foo>().Select(
t => new FooDTO()
{
Id = t.Id,
Name = "blah blah blah"
});
return Ok(foos);
}
// I am not getting here.
[HttpPost]
public IHttpActionResult Post(FooDTO entity)
{
System.Diagnostics.Debug.WriteLine("YEAH!");
return Ok(entity);
}
}
但是Post方法没有被执行。我已经尝试了很多方法来定义POST
方法,但我找不到一个有效的方法。
将一些数据发布到我的控制器中会导致以下错误:
无法创建抽象类。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其来源的更多信息 在代码中。
异常详细信息:System.MissingMethodException:无法创建抽象类。
来源错误: 在执行当前Web请求期间生成了未处理的异常。可以使用例外来识别关于异常的起源和位置的信息 堆栈跟踪下面。
堆栈跟踪: [MissingMethodException:无法创建抽象类。] System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&amp; canBeCached,RuntimeMethodHandleInternal&amp; ctor,Boolean&amp; bNeedSecurityCheck)+0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark&amp; stackMark)+138
System.Activator.CreateInstance(Type type,Boolean nonPublic)+105
System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes,StackCrawlMark&amp; stackMark)+1528
System.Activator.CreateInstance(Type type,BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes)+191 System.Activator.CreateInstance(Type type,BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture)+27
System.Web.HttpRuntime.CreateNonPublicInstance(Type type,Object [] args)+82
System.Web.Configuration.HandlerFactoryCache..ctor(String type)+58
System.Web.HttpApplication.GetFactory(String type)+104
System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+262
System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+137版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.6.114.0
更新:我使用以下PowerShell脚本来测试POST方法:
$body = @{
Id = 1;
Name = "Blah blah blah";
} | ConvertTo-Json -Compress
$response = Invoke-WebRequest `
-Method POST `
-Uri "https://localhost/MyModel/FooDTOs/" `
-ContentType "application/json" `
-Body $body