Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#未接收邮件_C#_Json_Asp.net Web Api - Fatal编程技术网

C#未接收邮件

C#未接收邮件,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

我正在用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
    {
        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中遇到过一些问题。