私はマイクロソフトの MVC を初めて使用するので、初心者の質問を許してください。Ruby/Rails アプリケーションを MS MVC 4 に移植しています。.NET MVC が Ruby/Rails API リクエストを変更せずに使用できるようにするために、これを徐々に行っていきます。POST 本文の xml をオブジェクトにデシリアライズする際に問題があります。戻り行にブレーク ポイントを配置すると、login の値が null になります。どんな助けでも大歓迎です。
API リクエストは認証されます...これがクライアントからのリクエストです。
POST http://cloudcare.webservices.local/users/authenticate HTTP/1.1
Host: cloudcare.webservices.local
Connection: keep-alive
Content-Length: 132
Accept: text/xml
<authenticate>
<login>david</login>
<password>secure</password>
<user_type_id>2</user_type_id>
</authenticate>
ここにAPIコントローラーがあります
public class UsersController : ApiController
{
private IUserRepository repository;
public UsersController(IUserRepository repo)
{
repository = repo;
}
[HttpPost]
public AuthenticateUserViewModel authenticate([FromBody]AuthenticateUserViewModel login)
{
return null;
}
}
ここにパラメータクラスがあります
[Serializable]
[DataContract(Name = "authenticate")]
public class AuthenticateUserViewModel
{
[DataMember(Name = "login")]
public string Login { set; get; }
[DataMember(Name = "password")]
public string Password { get; set; }
[DataMember(Name = "user_type_id")]
public int UserTypeId { get; set; }
}
ここに WebApiConfig があります
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { action = "index", id = RouteParameter.Optional}
);
var unity = new UnityContainer();
unity.RegisterType<Controllers.UsersController>();
unity.RegisterType<Repository.IUserRepository, Repository.Repositories.UserRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new IoCContainer(unity);
config.EnableSystemDiagnosticsTracing();
config.Formatters.XmlFormatter.UseXmlSerializer = true;
config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
}
}