C#未接收邮件
我正在用C#制作一个webapi应用程序。我使用postman向api发送post请求,但调用函数时,接收到的参数为null 看来C#没有看到帖子的任何内容 这是我的WebApiConfig.csC#未接收邮件,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我正在用C#制作一个webapi应用程序。我使用postman向api发送post请求,但调用函数时,接收到的参数为null 看来C#没有看到帖子的任何内容 这是我的WebApiConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace Lab1_v5 { public static class WebApiConfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace Lab1_v5
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
这是控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Lab1_API.Models;
namespace Lab1_API.Controllers
{
public class OperacionController : ApiController
{
public Operacion ProcesarResultado(Operacion op)
{
return Models.Operacion.Procesar(op);
}
}
}
这就是模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Lab1_API.Models
{
public class Operacion
{
private double value1, value2, resultado;
private int tipoOperacion;
public double Value1 { get => value1; set => value1 = value; }
public double Value2 { get => value2; set => value2 = value; }
public double Resultado { get => resultado; set => resultado = value; }
public int TipoOperacion { get => tipoOperacion; set => tipoOperacion = value; }
public Operacion(double pvalue1, double pvalue2, double presultado, int ptipoOperacion)
{
this.Value1 = pvalue1;
this.Value2 = pvalue2;
this.Resultado = presultado;
this.TipoOperacion = ptipoOperacion;
}
public Operacion(double pvalue1, double pvalue2, int ptipoOperacion)
{
this.Value1 = pvalue1;
this.Value2 = pvalue2;
this.Resultado = 0;
this.TipoOperacion = ptipoOperacion;
}
public static Operacion Procesar(Operacion op)
{
double result = 0;
switch (op.tipoOperacion)
{
case 1:
result = op.Value1 + op.Value2;
break;
case 2:
result = op.Value1 - op.Value2;
break;
case 3:
result = op.Value1 * op.Value2;
break;
case 4:
result = op.Value1 + op.Value2;
break;
}
op.resultado = result;
return op;
}
}
}
我将此作为Json发送,标题为“application/Json”:
我尝试了几乎所有的事情,但我似乎不明白为什么我在控制器中得到一个空值
编辑-
我用来访问webapi的URL是:。您应该指定请求的标题。尝试添加
Content-Type: application/json
您应该指定请求的标题。尝试添加
Content-Type: application/json
您需要指定控制器上的方法用于POST请求。使用
HttpPost
属性
[HttpPost]
public Operacion ProcesarResultado(Operacion op)
{
return Models.Operacion.Procesar(op);
}
您需要指定控制器上的方法用于POST请求。使用
HttpPost
属性
[HttpPost]
public Operacion ProcesarResultado(Operacion op)
{
return Models.Operacion.Procesar(op);
}
您需要添加HttpPost属性,或者用Post启动方法名称
[HttpPost]
public Operacion ProcesarResultado(Operacion op)
{
return Models.Operacion.Procesar(op);
}
或
您需要添加HttpPost属性,或者用Post启动方法名称
[HttpPost]
public Operacion ProcesarResultado(Operacion op)
{
return Models.Operacion.Procesar(op);
}
或
您可以尝试使用
FromBodyAttribute
标记参数,如下所示:
[HttpPost]
public Operacion ProcesarResultado([FromBody] Operacion op)
{
return Models.Operacion.Procesar(op);
}
这应该建议使用反序列化请求体的框架。如果没有它,则可能需要表单数据。您可以尝试使用
FromBodyAttribute
标记参数,如下所示:
[HttpPost]
public Operacion ProcesarResultado([FromBody] Operacion op)
{
return Models.Operacion.Procesar(op);
}
这应该建议使用反序列化请求体的框架。如果没有它,它可能需要表单数据。问题在于构造函数。 快速修复: 只需添加无参数构造函数:
public Operacion()
{
}
不要忘记正确地命名您的操作(以:Post开始操作名称)或在操作定义之前添加[HttpPost]属性(如果您保持这种状态,可能会增加更多问题) 问题在于构造函数。 快速修复: 只需添加无参数构造函数:
public Operacion()
{
}
不要忘记正确地命名您的操作(以:Post开始操作名称)或在操作定义之前添加[HttpPost]属性(如果您保持这种状态,可能会增加更多问题) 除了可能不将方法标记为接受POST请求之外,您的模型还缺少无参数构造函数。应该是
public class Operacion
{
private double value1, value2, resultado;
private int tipoOperacion;
public double Value1 { get => value1; set => value1 = value; }
public double Value2 { get => value2; set => value2 = value; }
public double Resultado { get => resultado; set => resultado = value; }
public int TipoOperacion { get => tipoOperacion; set => tipoOperacion = value; }
public Operacion()
{
}
// other constructors and methods
}
框架需要无参数构造函数来实例化类,因为它不能将构造函数与参数一起使用,因为它不知道如何填充它们
如果您的模型没有明确声明任何构造函数,则会自动生成默认的无参数构造函数。除了可能没有将您的方法标记为接受POST请求之外,您的模型缺少无参数构造函数。应该是
public class Operacion
{
private double value1, value2, resultado;
private int tipoOperacion;
public double Value1 { get => value1; set => value1 = value; }
public double Value2 { get => value2; set => value2 = value; }
public double Resultado { get => resultado; set => resultado = value; }
public int TipoOperacion { get => tipoOperacion; set => tipoOperacion = value; }
public Operacion()
{
}
// other constructors and methods
}
框架需要无参数构造函数来实例化类,因为它不能将构造函数与参数一起使用,因为它不知道如何填充它们
如果您的模型没有明确声明任何构造函数,则会自动生成默认的无参数构造函数。能否添加请求URL的示例?将此添加到问题中,并添加指定您使用的动词(例如
POST
,GET
)。如果没有这些信息,很难理解问题的原因。您的问题解决了吗?没有,仍然为空。您可以添加请求的URL示例吗?将此添加到您的问题中,并添加指定您使用的动词(例如,POST
,GET
)。如果没有这些信息,很难理解问题的原因。你解决问题了吗?没有,仍然为空。标头在Postman中指定,就像那样,仍然不工作。标头在Postman中指定,就像那样,仍然不工作。我添加了它,什么都没有。我仍然得到Null,因为参数I添加了它,什么也没有。我仍然会得到Null,因为parameterComplex类型(如类)在默认情况下总是在主体中传输,请参见我添加了它,并且没有任何更改。似乎参数“op”是绝对空的。它并不是有一个不同的反序列化,或者它正在接收其他东西,它只是空的。默认情况下,类等复杂类型总是在主体中传输,请看我添加了它,没有任何更改。似乎参数“op”是绝对空的。它并不是有一个不同的反序列化,或者它正在接收其他东西,它只是来了empty@GinoMarin尝试向Operacion类添加空构造函数,我们曾经在WebAPI中遇到过一些问题。@GinoMarin尝试向Operacion类添加空构造函数,我们曾经在WebAPI中遇到过一些问题。