相关疑难解决方法(0)

在WebApi中使用HttpContext.Current是危险的,因为异步

我的问题与此有点相关:具有依赖注入的HttpContext.Items的WebApi等价物.

我们想使用Ninject在WebApi区域中使用HttpContext.Current注入一个类.

我担心的是,这可能非常危险,因为在WebApi(一切?)是异步的.

如果我在这些方面有误,请纠正我,这是我到目前为止调查的内容:

  1. HttpContext.Current通过Thread获取当前上下文(我直接查看了实现).

  2. 在异步任务中使用HttpContext.Current是不可能的,因为它可以在另一个Thread上运行.

  3. WebApi使用IHttpController和method Task<HttpResponseMessage> ExecuteAsync=>每个请求都是async =>你不能在action方法中使用HttpContext.Current.它甚至可能发生,更多的请求是通过相同的线程在同一个线程上执行的.

  4. 为了创建带有注入内容的控制器到构造函数中,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

61
推荐指数
2
解决办法
4万
查看次数

获取MVC4 .NET类中的Action URL

基本上,我想要与Url.Action相同的功能,但在控制器之外.这可能吗?

虽然我确定我会在别处使用它,但我目前的愿望是在视图模型中生成动作URL.

c# asp.net-mvc asp.net-mvc-routing

7
推荐指数
1
解决办法
9878
查看次数

ASP.NET Web API下载文本

我有一个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开发工具"响应选项卡"中.

c# asp.net rest asp.net-web-api

5
推荐指数
1
解决办法
3953
查看次数

ASP.Net WebAPI返回CSS

我需要编写一个Web API方法,该方法以CSS纯文本而不是默认XML或JSON的形式返回结果,是否需要使用特定的提供程序?

我尝试使用ContentResult类(http://msdn.microsoft.com/zh-cn/library/system.web.mvc.contentresult(v=vs.108).aspx)但没有运气。

谢谢

asp.net-web-api

3
推荐指数
1
解决办法
2964
查看次数

从web api帖子返回text\plain json响应

我在从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

我可能在这里错过了一些小东西.

c# json asp.net-web-api

2
推荐指数
1
解决办法
1万
查看次数

WebApi:返回简单字符串的方法

我的一个方法需要只返回一个简单的文本字符串.该方法的返回类型应该是什么?我还在子类中声明它ApiController吗?

我尝试了以下但它不起作用:

public class TestController : ApiController
{
    public string Announcements()
    {
        return "Testing abc";
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-web-api

2
推荐指数
1
解决办法
1万
查看次数