www urlencoded net method formdata form data asp application c# asp.net json asp.net-web-api

c# - method - ASP.NET web api no puede obtener la aplicación/x-www-form-urlencoded HTTP POST



formdata web api c# (5)

Citando desde here :

De forma predeterminada, la API web intenta obtener tipos simples del URI de solicitud. El atributo FromBody le dice a la API web que lea el valor del cuerpo de la solicitud.

La API web lee el cuerpo de la respuesta como máximo una vez, por lo que solo un parámetro de una acción puede provenir del cuerpo de la solicitud. Si necesita obtener varios valores del cuerpo de la solicitud, defina un tipo complejo.

Segundo, el cliente debe enviar el valor con el siguiente formato:

= valor

Específicamente, la parte del nombre del par nombre / valor debe estar vacía para un tipo simple.

Por lo tanto, si desea publicar datos en el formato data=string , debe crear un tipo complejo.

public class MyFormData { public string Data { get; set; } }

Y actualiza tu controlador así:

public void Post(MyFormData formData) { //your JSON string will be in formData.Data }

Por supuesto, otras alternativas para usted es cambiar el tipo de contenido a JSON, pero realmente depende de sus requisitos.

Soy nuevo en web-api. Quiero recibir datos HTTP POST utilizando web-api. El tipo de contenido es application/x-www-form-urlencoded , y el cuerpo de la solicitud es como:

data={"mac":"0004ED123456","model":"SG6200NXL"} (formato JSON).

Mi controlador es así:

public void Post([FromBody]string formData) { data.Add(formData); }

Pero formData siempre es nulo. Solo cuando cambio el cuerpo de la solicitud a:

={"mac":"0004ED123456","model":"SG6200NXL"}

Puedo encontrar {"mac":"0004ED123456","model":"SG6200NXL"} se guardó en mi cadena formData .

Entonces mi pregunta es cómo debo recibir los datos con formato:

data={"mac":"0004ED123456","model":"SG6200NXL"} ?

¿Y hay una manera fácil de desalinizar el JSON en C #?

¡Gracias por la ayuda!

ACTUALIZACIÓN: Traté de usar el modelo, pero todavía no funciona para mí. Mi modelo es:

public class Device { public string mac { get; set; } public string model { get; set; } }

y mi solicitud HTTP POST es:

encabezamiento:

User-Agent: Fiddler Content-type: application/x-www-form-urlencoded Host: localhost:52154 Content-Length: 46

cuerpo:

data={"mac":"0004ED123456","model":"SG6200NX"}

Tengo que usar Content-type: application/x-www-form-urlencoded según lo que sé, porque el HTTP POST es enviado por un enrutador. Mi trabajo es recibir los datos.


Debes crear un objeto de tus datos como:

public class Device { public string mac {get;set;} public string model {get;set;} }

luego cambie el método de acción de su controlador de esta manera y pase su objeto a este método de consumo

public void Post(Device deviceData) { // You can extract data like deviceData.mac, deviceData.model etc data.Add(deviceData); }

Puede usar una de las bibliotecas populares json.net para serializar / deserializar el objeto json en C #


Este post es viejo, pero lo encontré mientras buscaba una respuesta. Publicaré cómo conseguí el mío para trabajar, tal vez alguien lo encuentre útil.

Aquí está la solicitud:

POST /api/values HTTP/1.1 Host: localhost:62798 Accept: text/json Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache Postman-Token: 51ee1c5f-acbb-335b-35d9-d2b8e62abc74 UID=200&EMAIL=john%40jones.com&FIRST_NAME=John&LAST_NAME=jones&PHONE=433-394-3324&CITY=Seattle&STATE_CODE=WA&ZIP=98105

Aquí está el modelo:

public class SampleModel{ public string UID { get; set; } public string Email { get; set; } public string First_Name { get; set; } public string Last_Name { get; set; } public string Phone { get; set; } public string City { get; set; } public string State_Code { get; set; } public string Zip { get; set; } }

Y aquí está el método POST que automágicamente (FromBody) convierte los valores codificados en el modelo.

public HttpResponseMessage Post([FromBody] SampleModel value){

Pude seleccionar cualquier valor, es decir

SearchCity(value.City); SearchName(value.Last_Name);


Si está utilizando Content-type: application / x-www-form-urlencoded, no puede esperar recibir JSON.

¿Supongo que está utilizando un formulario para enviar los datos al controlador Web Api?

Primero debe cambiar el tipo de contenido a application / json y luego debe asegurarse de que está enviando datos JSON en el cuerpo de su solicitud. Si está enviando los datos a través de un formulario, puede usar javascript para crear un objeto JSON a partir de los datos de su formulario.

Para deserializar JSON en C # recomiendo Json.NET: json.net


crear un modelo

public class MyClass { public string mac { get; set; } public string model { get; set; } }

y use .net JavaScriptSerializer (). Deserialize

public void Post([FromBody]string formData){ MyClass obj = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<MyClass>(formData); //get mac and model by obj.mac obj.model }

saludos :)