C #, сгенерируйте HttpPost, отправленный в MVC 2 Action с моделью в качестве параметра - PullRequest
0 голосов
/ 17 февраля 2011

Я хочу создать HTTP-пост, который будет отправлять данные и автоматически связывать данные в модель. У меня проблема с тем, чтобы заставить это работать, поскольку модель появляется пустая. Я использую MVC 2.

Мой контроллер

[HttpPost]
public JsonResult Authenticate(AuthenticateRequest request)
{
    //...do stuff
}

и вот как я строю запрос.

private static string Url(string action, string controller)
    {
        return String.Format("{0}/{1}/{2}", Settings.Default.MobileServiceUrl, controller, action);
    }

    public static string Post(string action, string controller, NameValueCollection parameters)
    {
        string url = Url(action, controller);

        using (WebClient client = new WebClient())
        {
            NameValueCollection fields = new NameValueCollection();

            client.UploadValues(url, parameters);

            byte[] respBytes = client.UploadValues(url, fields);

            return client.Encoding.GetString(respBytes);
        }
    }

Вот класс модели

public class AuthenticateRequest
{
    public string SiteAbbreviation { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string AdminPassword { get; set; }
}

вот пример данных

NameValueCollection fields = new NameValueCollection();
        fields.Add("SiteAbbreviation", "ABCD");
        fields.Add("Username", "username");
        fields.Add("Password", "password");
        fields.Add("AdminPassword", "password");

        var json = HttpRequestHelper.Post("Authenticate", "Account", fields);

        var result = JsonConvert.DeserializeObject<AuthenticateRequest>(json);

EDIT:

Если вам интересно, почему я это делаю, мое приложение mvc - это API для отдыха, который возвращает json для всего. Я пытаюсь создать тестовый проект для проверки методов моего контроллера.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Предполагая, что:

public class AuthenticateRequest
{
    public string SiteAbbreviation { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string AdminPassword { get; set; }
}

и

[HttpPost]
public ActionResult Authenticate(AuthenticateRequest request)
{
    //...do stuff
}

следующее должно определенно работать:

using (var client = new WebClient())
{
    var fields = new NameValueCollection
    {
        { "SiteAbbreviation", "ABCD" },
        { "Username", "username" },
        { "Password", "password" },
        { "AdminPassword", "password" }
    };
    byte[] result = client.UploadValues(
        "http://foo.com/someController/authenticate", 
        fields
    );
    // TODO: do something with the result
    // if it is a JSON object deserialize it back to a model
}

Как только вы убедитесь, что это работает (и должно работать), вы можете приступить к компонентизации этого кода.

0 голосов
/ 28 апреля 2012

Получил Error 404 в MVC 3. После удаления атрибута [HttpPost] приведенный выше код работал нормально.

...