首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c#中定义和调用api

如何在c#中定义和调用api
EN

Stack Overflow用户
提问于 2015-03-12 21:11:42
回答 2查看 3.4K关注 0票数 1

我以前在MVC中创建了POST/GET请求。

在我的HomeController里

代码语言:javascript
运行
复制
    [HttpPost]
    public string Index(int Value)
    {
        return Value.ToString();
    }

并使用窗体数据设置铬扩展邮递员。

我可以用变量' value‘和值'1’调用http://localhost/mvcApp/,并得到字符串'1‘作为回报

但是当我创建一个surveyController : ApiController时,当我调用http://localhost/mvcApp/api/survey/时不起作用

代码语言:javascript
运行
复制
    public string Post(int Value)
    {
        return Value.ToString();
    }

"Message":“没有找到与请求URI‘http://localhost/mvcApp/api/survey/’匹配的HTTP资源。” "MessageDetail":“在与请求匹配的控制器‘调查’上没有发现任何操作。”

我不确定错误是在创建api的方式上,还是在POSTMAN试图调用api的方式上。因为那个'.'

也可以试试我的HomeControler索引

代码语言:javascript
运行
复制
client.BaseAddress = new Uri("http://localhost/mvcApp");
var result = client.PostAsync("/api/survey", new
{
   Value = 1                    
}, new JsonMediaTypeFormatter()).Result;

if (result.IsSuccessStatusCode) // here return Not found
EN

Stack Overflow用户

发布于 2015-03-12 21:20:01

WebApi控制器的约定与普通的ol控制器不一样。

基本上,问题在于您不能以您所做的方式指定int参数。

在您的WebApi控制器中尝试这样做:

代码语言:javascript
运行
复制
// nested helper class
public class PostParams {
    public int Value { get; set; }
} 

public string Post(PostParams parameters) {
    return parameters.Value.ToString();
}

看看那是怎么回事。

下面是一篇关于将POST请求中的参数传递给WebAPI控制器的详细文章:Passing-multiple-POST-parameters-to-Web-API-Controller-Methods

长话短说,这些都是惯例,粗略地说:

  • 不能捕获参数中的POST表单名称-值对
  • 如果类是方法参数之一的参数类型,则可以在类的属性中捕获它们。
  • 可以捕获方法参数中的查询参数

编辑

如果希望使用WebAPI测试C#服务器,可以执行以下步骤:

  1. 创建一个很好的控制台应用程序(最好在相同的解决方案中)
  2. Web客户端 NuGet包添加到此控制台应用程序
  3. 让你的Program.cs做这样的事情。

以下代码使用C# 5.0 await运算符。它还使用Task类和匿名类型。我已经指出了官方的MSDN文章(点击链接),如果您对这些内容感兴趣的话。

代码语言:javascript
运行
复制
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApplication1 {
    class Program {

        public static void Main(string[] args) {
            Test().Wait();
        }

        private static async Task Test() {
            HttpClient client = new HttpClient();

            await client.PostAsJsonAsync(
                "http://localhost/mvcApp/api/survey/",
                new {
                    value = 10
                }
            );
        }

    }
}
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29020271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档