我正在尝试对ASP.NET MVC控制器操作执行跨域POST请求.此控制器操作接受并使用各种参数.问题是,当预检请求发生时,控制器操作实际上会尝试执行,因为OPTIONS请求没有传递任何数据,控制器操作会抛出500 HTTP错误.如果我删除使用该参数的代码或参数本身,则整个请求链成功完成.
这是如何实现的一个例子:
控制器动作
public ActionResult GetData(string data)
{
return new JsonResult
{
Data = data.ToUpper(),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
Run Code Online (Sandbox Code Playgroud)
客户端代码
<script type="text/javascript">
$(function () {
$("#button-request").click(function () {
var ajaxConfig = {
dataType: "json",
url: "http://localhost:8100/host/getdata",
contentType: 'application/json',
data: JSON.stringify({ data: "A string of data" }),
type: "POST",
success: function (result) {
alert(result);
},
error: function (jqXHR, textStatus, errorThrown) {
alert('Error: Status: ' + textStatus + ', Message: ' + errorThrown);
}
};
$.ajax(ajaxConfig);
});
});
</script> …Run Code Online (Sandbox Code Playgroud) 我正在尝试针对包含Visual Studio Installer Project的 .NET Framework 4.7.2 解决方案设置 Azure DevOps 构建管道。我已在 Windows Server 2019 VM 上设置了自托管代理,该 VM 安装了 Visual Studio 2019 Community。构建管道包含 NuGet 安装程序任务,后跟 NuGet 任务,设置用于恢复引用的 NuGet 包。下面是 YAML 片段:
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '$(solution)'
Run Code Online (Sandbox Code Playgroud)
但是,使用此配置运行构建会导致构建日志中出现以下错误:
[错误]nuget 命令失败,退出代码(1) 和错误(C:\##############.vdproj(1,1): 错误 MSB4025: 项目文件无法已加载。根级别的数据无效。第 1 行,位置 1。)
这似乎是由于新版本的 nuget.exe 中的性能增强所致。基于此GitHub 问题的建议是使用 MSBuild 设置跳过不存在的包目标RestoreUseSkipNonexistentTargets。
GitHub问题提到使用NUGET_RESTORE_MSBUILD_ARGS NuGet CLI环境变量来设置此属性,但我不知道如何通过NuGet构建任务来实现这一点。
false由于 NuGet 现在已与 MSBuild 集成,因此我尝试通过 NuGet 任务上的命令行参数设置此属性。我修改了 YAML,将命令设置为custom以便传递参数。我的语法基于MSBuild 恢复文档。现在看起来如下:
- task: …Run Code Online (Sandbox Code Playgroud) msbuild nuget nuget-package-restore azure-devops azure-pipelines
我一直致力于从我们的一个MVC3站点启用JSON压缩.从我读过的各种文章看起来好像我应该能够application/json; charset=utf-8在应用程序web.config文件中设置MIME类型.但这样做并不能实现压缩.但是当添加到applicationhost.config文件时,它可以工作.我在这里错过了什么吗?
我的应用程序web.config添加了以下内容:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="application/javascript; charset=utf-8" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="application/javascript; charset=utf-8" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
Run Code Online (Sandbox Code Playgroud)
服务器正在运行带有IIS7.5的Windows Server 2008 R2.我还为相关网站安装并启用了动态压缩功能.
任何帮助将不胜感激,因为我不希望为整个服务器启用JSON压缩.
我通过WCF服务中的SFTP会话收到文件。该文件被读入MemoryStream对象。我已将此流成功输出到磁盘上的文件,并验证了文件已成功传输(使用FileStream而不是来完成MemoryStream)。
但是,当我将其转换MemoryStream为a byte[]并将其保存到SQL Server表(该列声明为VARBINARY(MAX))时,似乎该文件前面已经有8个字节。
举例来说,我使用WCF SFTP服务上传了一个.txt文件,并将其保存到数据库中。然后,使用BCP,将文件输出到磁盘。打开文件后,第一行之前带有“ U”(“ U”和7个空格)。
Office文档也是如此。我已经对.xls文件执行了与上述相同的过程,该文件一开始的大小为49Kb。但是,使用BCP输出文件时,文件已损坏且大小为50Kb。
奇怪的是,.pdf文件似乎可以正确保存和导出。
我正在使用的一些代码片段:
将流转换为字节数组
var stream = (MemoryStream)data;
stream.Seek(0, SeekOrigin.Begin);
byte[] m_Bytes = stream.ToArray();
Run Code Online (Sandbox Code Playgroud)
将字节数组保存到SQL Server
cmd.Parameters.Add("@File", System.Data.SqlDbType.VarBinary, -1).Value = file;
Run Code Online (Sandbox Code Playgroud)
使用BCP将文件从SQL Server导出到文件
bcp "SELECT [File] FROM SFTPUpload.dbo.Upload" queryout "C:\SFTP\Test.txt" -T -N -S Server_Name\Instance_Name
Run Code Online (Sandbox Code Playgroud)
这可能是我用来将文件保存到数据库的方法出现问题,还是我如何使用BCP检索文件?后者似乎更有可能,因为将文件直接保存到磁盘不会损坏它。
任何帮助或建议,将不胜感激。
.net ×1
asp.net-mvc ×1
azure-devops ×1
bcp ×1
c# ×1
cors ×1
iis-7.5 ×1
msbuild ×1
nuget ×1
sql-server ×1
stream ×1
wcf ×1