Параметр Microsoft MVC 4 в виде XML в теле сообщения POST

Я новичок в MVC Microsoft, поэтому, пожалуйста, прости мой вопрос новичка. Мы портируем приложение Ruby/Rails на MS MVC 4. Мы будем делать это со временем, поэтому.NET MVC должен иметь возможность принимать запрос API Ruby/Rails без изменений. У меня проблемы с десериализацией xml в теле POST к объекту. Когда я ставлю точку останова на обратной строке, значение логина равно нулю. Любая помощь будет принята с благодарностью.

Запрос 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"));
    }
}

0 ответов

Другие вопросы по тегам