【发布时间】:2019-03-11 17:41:34
【问题描述】:
处理发布到 Web api 的最佳或更好的方法是什么?如何通过 C# 完成?
Web API 代码
public class ProcessController : ApiController
{
[HttpGet]
public string Test()
{
return "Hello from API";
}
[HttpPost]
public IHttpActionResult ApiPost(Model m)
{
return Ok();
}
}
public class Model
{
public int Id {get; set;}
public string Name {get; set;}
}
调用web api的代码
HttpClient client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });
client.BaseAddress = new Uri("http://localhost:2478/api/Process/");
HttpResponseMessage response = await client.GetAsync("test");
Model m = new Model ();
m.Id= 4;
m.Name = "test";
var r = client.PostAsJsonAsync("ApiPost", m);
这将返回 500 内部服务器错误。这里有什么遗漏吗?
Web API 配置
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var settings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
settings.Formatting = Formatting.Indented;
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
【问题讨论】:
-
请提供更完整的 Web API 示例。 500 错误表示服务器端错误,但我们只能猜测。
-
@Amy 就是这样。我只是想通过一个帖子。我能够使用单个字符串参数来做到这一点,但我无法成功发布对象。到目前为止,post 方法中没有其他代码。
-
您可以提供更多的代码。包括控制器。包括您的 global.asax。您正在服务器端做某事,我们无法猜测是什么。您是否在调试器中启动了 Web api 以查看故障所在?如果没有minimal reproducible example,我们无法回答这个问题。
-
在我看来,您指定的路线不正确,但这与您报告的状态代码不匹配。您可以共享 App_Start 配置文件中的路由配置吗?而不是localhost:2478/api/Process 尝试localhost:2478/Process 作为你的基地址,看看状态码是否开始在400范围内。
-
@VitorPaulino 如果我提出获取请求,则相同的地址有效。只是似乎在本地发帖失败。
标签: c# .net dotnet-httpclient