Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 如何正确实现.NET控制器方法来处理POST请求,检索URI参数和请求负载?_C#_.net_Asp.net Mvc_Asp.net Apicontroller - Fatal编程技术网

C# 如何正确实现.NET控制器方法来处理POST请求,检索URI参数和请求负载?

C# 如何正确实现.NET控制器方法来处理POST请求,检索URI参数和请求负载?,c#,.net,asp.net-mvc,asp.net-apicontroller,C#,.net,Asp.net Mvc,Asp.net Apicontroller,我必须开发一个restapi,它必须处理POST请求(从请求主体中获取有效负载),同时获取一个URI参数 在我的控制器类中,我有如下内容: public class MailProtocolloController : ApiController { [SharePointContextWebAPIFilter] [HttpPost] [ActionName("protocollo/mail")] public IHttpActionResult InviaAlP

我必须开发一个restapi,它必须处理POST请求(从请求主体中获取有效负载),同时获取一个URI参数

在我的控制器类中,我有如下内容:

public class MailProtocolloController : ApiController
{
    [SharePointContextWebAPIFilter]
    [HttpPost]
    [ActionName("protocollo/mail")]
    public IHttpActionResult InviaAlProtocollo(XXX)
    {



        return Ok("TEST");
    }
}
我的问题是:

  • 如您所见,我正在使用ActionName注释来指定此控制器方法处理的URL路径。如何将URI参数指定到此ActionName注释中?(我可以吗?)它必须处理这样的事情:protocollo/mail/{id}

  • 必须为此控制器方法指定什么输入参数?一个用于从URI检索的ID(字符串)和一个用于请求负载的对象?或者可以在方法内部检索此有效负载

  • 如何实现此行为?

    尝试以下操作:

    public class MailProtocolloController : ApiController
    {
        [SharePointContextWebAPIFilter]
        [HttpPost]
        [Route("protocollo/mail/{id}")]
        public IHttpActionResult InviaAlProtocollo([FromUri] string id, [FromBody] string context)
        {
    
    
    
            return Ok("TEST");
        }
    }
    

    您可以使用
    RouteAttribute
    定义路由映射,其中可以使用参数占位符从url路径获取这些映射

    如果使用
    FromBody
    属性修饰表示请求正文的参数,也可以获取请求正文:

    [RoutePrefix("protocollo")]
    public class MailProtocolloController : ApiController
    {
        [SharePointContextWebAPIFilter]
        [HttpPost]
        [Route("mail/{id}")]
        public IHttpActionResult InviaAlProtocollo(string id, [FromBody]string body)
        {
            return Ok("TEST");
        }
    }
    

    “我在.NET中是个新手”-你用过,所以这不适用。阅读并展示你所做的尝试。存在大量重复问题。调用my API我获得此错误:您正在查找的资源已被删除、名称已更改或暂时不可用。请检查:(在页面底部)调用my API我获得此错误:您正在查找的资源已被删除、名称已更改,或者暂时不可用如何调用API?您能否发送一个示例,因为您收到此响应可能有很多原因。我正在调用这样的URL(在我的应用程序中?参数是必需的):
    api/MailProtocollo/protocollo/mail/xxx
    这是有效的路由吗?我假设您不需要
    MailProtocollo
    url部分,那么您的路由映射现在看起来如何?