相关疑难解决方法(0)

我可以将基于接口的对象传递给MVC 4 WebApi POST吗?

我希望有这样的API:

public class RelayController : ApiController
{
    // POST api/values
    public void Post([FromBody]IDataRelayPackage package)
    {
        MessageQueue queue = new MessageQueue(".\\private$\\DataRelay");
        queue.Send(package);
        queue.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到'包'的空值,所以我想知道可能出错的地方.我唯一的想法是默认的JSON序列化程序无法处理这个,但我不清楚如何解决它.

c# asp.net-mvc post interface asp.net-web-api

17
推荐指数
2
解决办法
1万
查看次数

ASP.NET Web API操作方法参数的依赖注入

我正在使用C#中的ASP.NET Web API项目来获取移动应用程序的JSON接口.我的想法是为所有请求创建接口,然后仅在Web API代码中使用这些接口.

我最终得到了这样的东西:

public interface IApiObject {}
public interface IApiResponse<T> : IApiObject where T : IApiObject {}
public interface IApiRegistrationRequest : IApiObject {}
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

public class MyApiController : ApiController
{

    public IApiResponse<IApiObject> Register(IApiRegistrationRequest request) {
        // do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

我的Web API项目还包含这些接口的实现.

我假设Web API项目使用像MVC项目那样的模型绑定,所以我创建了一个继承感知的ModelBinderProvider,用于为所有IApiObjects提供一个绑定器,并使用Unity容器来解析其实现的接口.

但是,经过一番调查,我发现了Web API 如何进行参数绑定,并发现Web API使用格式化程序而不是复杂类型的模型绑定程序.链接的博客文章建议在我的操作参数上使用ModelBinderAttribute,但该属性仅接受类型作为参数.但是,我的自定义模型绑定器不包含空构造函数(它需要一个统一容器),所以我需要传递它的一个实例.

我能想到的另一种方法是使用依赖注入格式化程序.不幸的是,我不熟悉它们,因为我以前从未使用它们.

哪种方式正确?我该怎么办?

c# dependency-injection asp.net-web-api

9
推荐指数
1
解决办法
3385
查看次数