我的问题与此有点相关:具有依赖注入的HttpContext.Items的WebApi等价物.
我们想使用Ninject在WebApi区域中使用HttpContext.Current注入一个类.
我担心的是,这可能非常危险,因为在WebApi(一切?)是异步的.
如果我在这些方面有误,请纠正我,这是我到目前为止调查的内容:
HttpContext.Current通过Thread获取当前上下文(我直接查看了实现).
在异步任务中使用HttpContext.Current是不可能的,因为它可以在另一个Thread上运行.
WebApi使用IHttpController和method Task<HttpResponseMessage> ExecuteAsync=>每个请求都是async =>你不能在action方法中使用HttpContext.Current.它甚至可能发生,更多的请求是通过相同的线程在同一个线程上执行的.
为了创建带有注入内容的控制器到构造函数中,IHttpControllerActivator与sync方法一起使用IHttpController Create.这是,ninject创建Controller及其所有依赖项.
如果我在所有这4点中都是正确的,那么在动作方法或下面的任何层中使用HttpContext.Current是非常危险的,并且可能会产生意外结果.我看到很多公认的答案正是如此.恕我直言,这可以工作一段时间,但会在负载下失败.
但是当使用DI创建一个Controller及其依赖项时,它是好的,因为它运行在一个独立的线程上.我可以从构造函数中的HttpContext获取一个值,它会安全吗?.我想知道每个Controller是否在每个请求的单个线程上创建,因为这可能会导致重负载下的问题,其中可以使用来自IIS的所有线程.
只是为了解释为什么我要注入HttpContext的东西:
我们想要的解决方案:它们之间的所有层都没有被这个感染,我们可以在代码深处使用注入的请求(例如在一些依赖于URL的ConfigurationProvider中)
如果我完全错误或者我的建议是正确的,请告诉我你的意见,因为这个主题似乎非常复杂.Thx提前!
multithreading asynchronous ninject httpcontext asp.net-web-api
基本上,我想要与Url.Action相同的功能,但在控制器之外.这可能吗?
虽然我确定我会在别处使用它,但我目前的愿望是在视图模型中生成动作URL.
我有一个WebAPI控制器,需要根据请求下载一些文件,但是当涉及到纯文本文件时,它不会给我浏览器的下载请求.它只给出了纯文本响应,就像它是JSON(在我的例子中,它是一个JSONP WebAPI).
我已经从堆栈(和其他网站)检查了其他问答,但我仍然一无所获:
这是我当前的代码:
var httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
httpResponse.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(content)));
httpResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
httpResponse.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
httpResponse.Content.Headers.ContentDisposition.FileName = "speedcam.txt";
return httpResponse;
Run Code Online (Sandbox Code Playgroud)
这是Chrome的回应:
缓存控制:无缓存
内容处置:附件; 文件名= speedcam.txt
内容长度:17462
内容类型:应用/八位字节流
日期:星期一,2012年8月27日04:53:23 GMT
到期日:-1
附注:无缓存
服务器:Microsoft-IIS/8.0
X-ASPNET-版本:4.0.30319
X-已启动方式:ASP.NET
X-SourceFiles:= UTF-8乙TTpcVHJhYmFsaG9cTWFwYVJhZGFyXE1hcGFSYWRhci5XZWJBUEk0XEV4cG9ydGE =????
似乎没问题,但整个文件文本都在Chrome开发工具"响应选项卡"中.
我需要编写一个Web API方法,该方法以CSS纯文本而不是默认XML或JSON的形式返回结果,是否需要使用特定的提供程序?
我尝试使用ContentResult类(http://msdn.microsoft.com/zh-cn/library/system.web.mvc.contentresult(v=vs.108).aspx)但没有运气。
谢谢
我在从WebApi返回'text/plain'json响应时遇到问题.
我需要返回它text/plain,默认情况下它将它返回为application/json.
我遇到的问题正是这个链接中发生的事情.这不是一个重复的帖子,因为我阅读了多个帖子,但仍然有一个小问题.
这是我的服务器代码:
public HttpResponseMessage Post()
{
var response = GetModel();
string jsonRes = JsonConvert.SerializeObject(response);
var resp = new HttpResponseMessage();
resp.Content = new StringContent(jsonRes);
resp.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
return resp;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的回应:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
Content-Type: text/plain
}
Run Code Online (Sandbox Code Playgroud)
jsonRes var包含有效的JSON.
为什么内容下载为内容:System.Net.Http.StringContent?
我可能在这里错过了一些小东西.
我的一个方法需要只返回一个简单的文本字符串.该方法的返回类型应该是什么?我还在子类中声明它ApiController吗?
我尝试了以下但它不起作用:
public class TestController : ApiController
{
public string Announcements()
{
return "Testing abc";
}
}
Run Code Online (Sandbox Code Playgroud)