我正在研究如何从jQuery ajax调用从ASP.NET Web Api下载CSV文件.CSV文件是基于自定义CsvFormatter从Web API服务器动态生成的.
来自jQuery的Ajax:
$.ajax({
type: "GET",
headers: {
Accept: "text/csv; charset=utf-8",
},
url: "/api/employees",
success: function (data) {
}
});
Run Code Online (Sandbox Code Playgroud)
在服务器上,EmployeeCsvFormatter实现类似于下面的文章,派生自BufferedMediaTypeFormatter:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
public class EmployeeCsvFormatter : BufferedMediaTypeFormatter
{
public EmployeeCsvFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
...
}
Run Code Online (Sandbox Code Playgroud)
我还添加了覆盖方法来表示我想像下载文件一样下载文件(可以在下载选项卡中看到下载文件):
public override void SetDefaultContentHeaders(Type type,
HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.Add("Content-Disposition", "attachment; filename=yourname.csv");
headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,下载文件没有显示在Chrome的状态栏或下载标签中,即使来自Fiddler,我看到它的响应似乎是正确的:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/11.0.0.0
Date: Mon, 11 Mar 2013 08:19:35 GMT …Run Code Online (Sandbox Code Playgroud) 我正在运行Windows 7,并且通常不是此设置中的开发人员,并且最近在C#中构建了WCF Rest服务,我现在正尝试在本地计算机上部署到IIS.经过多次争论,我设置了应用程序,但是当我导航到应用程序时,我收到一条错误消息:编译错误
描述:编译服务此请求所需的资源时发生错误.请查看以下特定错误详细信息并相应地修改源代码.
编译器错误消息:CS0016:无法写入输出文件'c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll' - '访问被拒绝."
我尽最大努力搜索网络,并更改了Temporary ASP.NET Files fodler的权限,以允许网络服务帐户拥有完整权限,并对Temp文件夹执行相同操作.它在失败之前复制了许多文件,因此它可能具有写入权限,因此我检查了从源文件夹中读取的权限,这也是有效的.我还注意到它在尝试缓存DLL文件时出现问题,并尝试关闭我的防病毒保护,以及关闭UAC,只是为了看看是否能够找出阻止这种情况发生的原因.我现在的想法很新鲜.有人有什么建议吗?
我正在MSDN上查看IEnumerable<T>接口定义,并看到:
public interface IEnumerable<out T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
我想知道为什么T被定义为out,为什么不呢?
public interface IEnumerable<T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
假设我有一个异步方法:
public async Task Do()
{
await Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是尝试Do在catch块内调用方法
public async Task DoMore()
{
try
{
}
catch (Exception)
{
await Do(); //compiled error.
}
}
Run Code Online (Sandbox Code Playgroud)
但是这样,编译器不允许await在里面使用catch,有没有任何理由在幕后为什么我们不能这样使用呢?
在ADAL.NET 2.x中,我们使用以下代码从Azure AD中获取令牌UserCredential并且它完美地运行:
var authContext = new AuthenticationContext(Authority);
var userCredential = new UserCredential(username, password);
var token = authContext.AcquireToken(ResourceUrl, ClientId, userCredential);
Run Code Online (Sandbox Code Playgroud)
当我今天升级ADAL.NET v3时,代码无法再编译,因为在新版本中,UserCredential没有使用用户名和密码重载构造函数.
我如何使用新版本的ADAL.NET v3解决这个问题?
SQL Server中的information_schema表和sys表是什么?它们之间有什么区别?
谢谢
这可能是一个简单而简单的问题,但我仍然有点混淆bitwise OR决定使用的原因.假设我有一个A包含四个字段的类:
class A
{
private int Field1;
private static int Field2;
public int Field3;
public static int Field4;
}
Run Code Online (Sandbox Code Playgroud)
并Reflection用来获取字段:
var fields = typeof (A).GetFields(BindingFlags.Public | BindingFlags.Static);
Run Code Online (Sandbox Code Playgroud)
如果你是新手,Reflection并且不知道如何使用BindingFlags,那么你头脑中最初的逻辑思维是:
此行将选择所有静态OR公共字段,因为使用了按位OR.你想到的预期结果:
Field2
Field3
Field4
Run Code Online (Sandbox Code Playgroud)
但是当击中F5时,结果将完全不同,按位的OR方式如下AND:
Field4
Run Code Online (Sandbox Code Playgroud)
为什么不使用可能跟随逻辑思维的按位AND运算符.像这样:
var fields = typeof (A).GetFields(BindingFlags.Public & BindingFlags.Static);
Run Code Online (Sandbox Code Playgroud)
我在MSDN中找到了单词:
在某些情况下,用于组合标志的按位OR运算可能被认为是一种高级概念,简单任务不应该这样做.
请允许任何人以简单的方式解释这里的先进概念以便理解吗?
我有一个Money结构,有货币和金额.我希望能够使用linq对List进行求和.
public struct Money
{
public string Currency { get; set; }
public decimal Amount { get; set; }
public static Money operator +(Money m1, Money m2)
{
if (m1.Currency != m2.Currency)
throw new InvalidOperationException();
return new Money() { Amount = m1.Amount + m2.Amount, Currency = m1.Currency };
}
}
Run Code Online (Sandbox Code Playgroud)
给定上面的代码,如果我有一个具有Money值对象的Items列表,则可以使Sum函数与Money值对象一起使用.
即
Items.Sum(m => m.MoneyValue);
Run Code Online (Sandbox Code Playgroud) 我使用简单的3层架构.在这里我使用DTO类在UI,BL和DL之间进行通信.那么层之间的沟通有更好的方法吗?或者这是正确的方法?
我试图用stylecop正确设计一些旧代码.它要求将using语句放在里面.它除了一个以外都适用.我已将问题减少到以下代码.
namespace B.C
{
using System;
public class Hidden
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
}
namespace A.B.C
{
using B.C;
public class Program
{
static void Main(string[] args)
{
new Hidden().SayHello();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误错误
"无法找到类型或命名空间名称'隐藏'(您是否缺少using指令或程序集引用?)".
如果我使用BC移动; 在命名空间ABC之上,然后它正确构建.Hidden类是由不同的团队开发的,我们无法对其进行修改.
c# ×9
c#-4.0 ×2
linq ×2
.net ×1
3-tier ×1
adal ×1
async-await ×1
asynchronous ×1
azure ×1
c#-5.0 ×1
dto ×1
ienumerable ×1
iis ×1
iis-7 ×1
jquery ×1
namespaces ×1
permissions ×1
sql ×1
sql-server ×1
wcf ×1