- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这让我有点头疼。最终,我试图返回一个图像,但我一直在试验并将其简化为使用字符串。
我想要的:转到网址:
http://xxx/api/helloworld/1
响应:“Hello world!”
以下 web api 声明适用于提供的 url;
public string Get([FromUri]int id) { return "Hello World"; }
public Task<string> Get([FromUri]int id) { return "Hello World"; }
什么不起作用;
public HttpResponseMessage Get([FromUri]int id)
{
return Request.CreateResponse<string>(HttpStatusCode.OK, "Hello World");
}
public HttpResponseMessage Get([FromUri]int id)
{
HttpResponseMessage response = new HttpResponseMessage();
string text = "Hello World";
MemoryStream test = new MemoryStream();
test.Write(ConversionUtilities.ToBytes(text) /*custom string->byte[] method, UTF-8 encoding*/, 0, text.Length);
response.Content = new StreamContent(test);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
response.StatusCode = HttpStatusCode.OK;
return response;
}
当我有一个返回类型为 HttpResponseMessage 的 Get() 时,会发生以下错误;
No HTTP resource was found that matches the request URI "http://xxx/api/helloworld/1"
此错误仅针对此特定返回类型出现。现在,我在 WebApiConfig.cs 文件中的路由如下(适用于“字符串”返回类型);
// Controller with ID
// To handle routes like "/api/VTRouting/1"
config.Routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
// Controllers with Actions
// To handle routes like "/api/VTRouting/route"
config.Routes.MapHttpRoute(
name: "ControllerAndAction",
routeTemplate: "api/{controller}/{action}"
);
// Controller Only
// To handle routes like "/api/VTRouting"
config.Routes.MapHttpRoute(
name: "ControllerOnly",
routeTemplate: "api/{controller}"
);
有什么想法吗?我对返回类型行为感到困惑:-S
最佳答案
找到原因了!我根据有效的模板创建了一个空白的 api Controller 。提示一些复制/粘贴以缩小原因范围。这很微妙,我发布的代码之所以有效,是因为我更改了公开发布的变量名称——这最终是问题的原因。去图吧。
要复制,请按正常方式创建模板。这将创建一个方法;
public string Get(int id)
将此更改为;
public string Get(int personID)
然后试着跑。您将收到如上所述的错误。似乎 Get/Post/etc 参数的声明必须与路由中指定的相匹配。如果您像我一样将参数更改为“personID”,则可以通过将参数重命名回默认“id”或使用更新名称修改路由来修复;
config.Routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{personID}",
defaults: null,
constraints: new { personID = @"^\d+$" } // Only integers
);
注意路由模板和约束参数中的“{personID}”。该字段的名称必须与您的参数名称相匹配。在查找如何下载文件或只是一般查看 web api 时,它实际上从未在文档中说过这一点。当深入了解路由/mvc 的详细信息时,它可能会发生这种情况,但我不得不说,这很容易使不熟悉两者的 n00b 绊倒。请注意,我更有经验的同事也没有发现这一点 :-)。我希望这能帮助其他有同样痛苦的人!
关于c# - 当返回类型为 HttpResponseMessage 时,Web Api Get() 路由不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857370/
在 HttpClient 内部使用语句我需要从某个地方解包 HttpResponseMessage。 using (HttpClient client = new HttpClient()) {
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
var request = new HttpRequestMessage(HttpMethod.Get, $"api/Items"); request.Headers.Accept.Add(new M
我有一个方法接受 Stream 参数并将其传递给服务器 public async Task Execute(Stream archive) { archive.Seek(0,
我有如下服务的 MVC 项目: namespace comp.Services { public class CompService { public HttpClie
我已经验证了将 HttpResponseMessage 作为返回类型的文件设置为“编译”,就像他们在这里所说的:Why I cannot use HttpResponseMessage class?
我正在调用一个返回任务的方法,在调用方法中我需要读取字符串形式的响应。 这是我输入的代码: static public async Task Validate(string baseUri,HttpC
在等待新的 HttpClientFactory 解决 HttpClient 的所有问题时, 我仍然找不到是否应该处理 HttpResponseMessage 和 HttpRequestMessage
为什么要实现这个Web API [HttpGet("hello")] public HttpResponseMessage Hello() { var res = new HttpRespon
我正在编写一个 Web API Controller ,现在我有以下代码: public class PicklistsController : ApiController { private
我收到了 System.Net.Http.HttpResponseMessage> 类型的对象, 我如何获得 List ? 我尝试转换 content 属性并通过其 value 属性从 content
HttpResponseMessage r = new HttpResponseMessage(); r.StatusCode = HttpStatusCode.OK; r.Reaso
我正在尝试在我的 Web api 包装器中编写一个方法。我想利用“异步/等待”功能,这样用户界面就不会被阻塞。下面是 Web API 包装器中的代码片段。 public static asyn
我正在尝试从 .NET Core MVC 应用程序进行简单的 API 调用: using (var client = new HttpClient()) { client.BaseAddres
第一次使用.net的Httpclient,感觉很吃力。我已经设法调用服务器并从它接收响应,但一直停留在从响应中读取。这是我的代码: if (Method == HttpVerb.POST)
我想在 HttpResponseMessage 内容中返回一个文件,如下所示: return Request.CreateResponse(HttpStatusCode.OK, {{a file he
应用程序应该从 LoginUser() 接收到 httpresponsemessage 但它变得没有响应。 private void button1_Click(object sender,
我正在计算我的 C# web api 的性能。我写了一个非常简单的 HelloWorld 响应: public class HelloWorldController : ApiController {
我有一个 DelegatingHandler 的实现,它基本上接受一个请求并将其寻址到另一个服务器 ( http://localhost:9999/test/page.php --> http://o
我一直在开发移动应用程序的后端和前端,但在让我的帖子请求正常工作时遇到了问题。我一直在前端使用 Xamarin.Forms,在后端使用 .Net。 客户端代码: var res = await App
我是一名优秀的程序员,十分优秀!