我正在创建一个RESTful API,它将处理大量用户交互,包括使用存储的信用卡下订单.
如果订单成功,我将返回200 OK,如果订单请求格式错误或无效,我将返回400 Bad Request.但是,如果在订单的实际处理过程中出现问题,我应该返回什么?
最后一步是问题 - 如果订单因任何其他原因没有完成,我该返回什么?可能的情况包括:
这似乎不适合400或500.如果没有更好的代码,我可以将其视为400 - 根据业务规则,请求无效.它似乎不准确.
编辑:还发现了这个相同主题的现有讨论.所有答案似乎都指向使用此类违规的状态代码,并在使用400,409或422扩展之间进行了一些讨论.
这在某种程度上是对这里答案的后续行动.
我有一个自定义ActiveX控件,它引发了一个事件(带有"msg"参数的"ReceiveMessage"),需要在Web浏览器中由Javascript处理.从历史上看,我们已经能够使用以下仅IE语法在不同项目上实现此目的:
function MyControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
但是,当在掩埋控件的布局内部时,Javascript无法找到控件.具体来说,如果我们把它放到一个普通的HTML页面,它工作正常,但如果我们将它放入由<Form>标签包装的ASPX页面,我们会得到一个"MyControl is undefined"错误.我们尝试过以下变体:
var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
...但它会导致Javascript错误"GetControl未定义".
处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中工作感兴趣.这必须是我们正在做的自定义ActiveX控件.
谢谢.
我们在 ASP.Net 应用程序中遇到了一个问题,即在为用户生成报告后,Crystal Reports 引擎在服务器的 Temp 文件夹中留下垃圾 .tmp 文件。
所以我们试图弄清楚如何在 Report 对象上运行 .Close() 和 .Dispose() 方法,但我们发现在导出发生后代码永远不会运行。
MyReport.Report.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
this.Response, true, "My_Report");
MyReport.Report.Close();
MyReport.Report.Dispose();
Run Code Online (Sandbox Code Playgroud)
设置在最后两行的断点永远不会被命中,我们还尝试将其他代码放在那里来测试处理。没有一个运行。(我也在其他具有类似代码的网站上看到过这个问题,但没有答案)
我假设此时 ExportToHttpResponse 方法正在向用户返回文件流 (PDF),结束处理,因此其余代码不会运行。如果是这种情况,我们如何让 CR 对临时文件执行清理,而 Close() 和 Dispose() 方法应该这样做?我们是否必须实施手动事后清理?
我们使用DapperWrapper类来扩展和包装Dapper IDbConnection接口,以支持测试我们的存储库层.但是,在尝试使用Dapper中的父/子映射支持将查询中的多个结果集映射回分层对象时,我们遇到了一个问题,如此处的ParentChildIdentityAssociations示例测试中所示:
https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs#L1443
所以Dapper支持这个功能,但是当我们在DapperWrapper中使用IDbExecutor时,似乎会丢失对多个类型参数的支持.当我尝试执行以下操作时,出现编译错误"类型参数数量不正确".
var results = Db.Query<Deal, DealOption, Deal>(template.RawSql, template.Parameters).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
来自DapperWrapper的以下示例说明了我们实际调用的方法以及随附的SqlConnection对象(使用Dapper扩展).原始SqlConnection/IDbConnection对象是否支持由T定义的多个类型参数是有原因的,而以相同方式定义的包装方法不会?
public IEnumerable<T> Query<T>(
string sql,
object param = null,
IDbTransaction transaction = null,
bool buffered = true,
int? commandTimeout = default(int?),
CommandType? commandType = default(CommandType?))
{
return _sqlConnection.Query<T>(
sql,
param,
transaction,
buffered,
commandTimeout,
commandType);
}
Run Code Online (Sandbox Code Playgroud) 我在存储库中使用Dapper将查询结果映射到我要返回的API的DTO类型列表.一切似乎都正常工作但在查询和映射完成后,列表中填充了正确数量的对象,但所有int属性都为0,字符串为null.我在其他项目中使用了Dapper,并且从未遇到过这种情况.我还验证了数据是正确的,如果我将查询复制到SQL Management Studio,它会给我正确的数据.
这是包含自定义映射逻辑的存储库基类的构造函数.我确认这个代码很受欢迎.
static BaseRepository()
{
SqlMapper.SetTypeMap(typeof(T),
new CustomPropertyTypeMap(
typeof(T), (type, columnName) => type.GetProperties()
.FirstOrDefault(prop => prop.GetCustomAttributes(false)
.OfType<ColumnAttribute>()
.Any(attr => attr.Name == columnName))));
}
Run Code Online (Sandbox Code Playgroud)
以下是填充列表的存储库方法:
public IEnumerable<Dog> GetAll()
{
var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
return dogs;
}
Run Code Online (Sandbox Code Playgroud)
这是我的目标:
[DataContract]
public class Dog
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我已经确认"狗"变量被填充,但所有Id和Name元素都是0或null.以下是最终的JSON结果:
[
{
Id: 0,
Name: null
},
{
Id: 0,
Name: null
},
{
Id: …Run Code Online (Sandbox Code Playgroud) 我们的SSO登录过程对SQL Server中的自定义用户存储使用表单身份验证.
我们的新安全要求之一是仅允许帐户一次拥有一个活动会话.因此,只要用户登录,我们就会检查登录凭据是否已经处于活动状态,并且最好阻止新用户再次登录,直到其他会话结束.或者,如果更容易实现,我们可以强制其他会话结束.
使用表单身份验证有一种简单的方法吗?我们已经考虑了一种自定义方法,我们跟踪数据库中的每个会话,但这将是很多工作,我们可能必须修改我们的所有应用程序来检测session_end,我希望避免.我认为Forms Auth中必须有一些东西来处理这个问题.
我见过MembershipUser.IsOnline()方法,看起来很理想,但我们没有使用会员提供程序.
更新:为了清楚,我不需要检查当前用户是否已登录,我需要知道其他人是否已使用同一帐户登录.
这是我正在处理的Web API项目特有的设计问题,但它可能是REST原则的一般问题.我也可能完全过分思考这个问题.
我在Entity Framework中有一个类,它有另一个类的子集合:
public abstract class Tracker
{
[Key]
public int ID { get; set; }
[MaxLength(50)]
public string Name { get; set; }
public virtual ICollection<Unit> Units { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Unit类看起来像这样:
public class Unit
{
[Key]
public int ID { get; set; }
[MaxLength(50)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在开发一个Web API,它将获取跟踪器列表,并获取可用单元列表,然后将一个特定单元添加到跟踪器的单元列表中.跟踪器和单元有自己的API控制器和存储库,我试图弄清楚如何修改它们以支持创建这种关联,以及请求的样子.
是否适合通过PUT更新Tracker端点(/ Trackers/1)以将新单元添加到列表中,可能与现有单元一起添加?我该如何处理后端?我认为我对PUT方法的一个心理障碍是 - 我会将整个子对象包含在请求正文集合属性中吗?它没有意义,但我不确定它会如何起作用.假设(在我的情况下)将是添加到跟踪器列表中的单元将是已存在的单元,我们只是创建关联.我是否应该使用DTO来实现这两个目标,并相应地映射它们?
或者更有意义的是创建一个新的联合DTO,比如"TrackerUnit",它有一个相应的端点,我可以通过POST到该端点(POST/TrackerUnits)添加新的关联,然后在新的控制器中处理它的处理?我认为它还需要支持DELETE来删除项目.我并不为这种方法感到疯狂,因为这个端点不对应于我系统中的任何实际资源,而只是用于映射这些关联.
我们有一个经典的ASP应用程序正在推出一些非常大的报告,其中生成的HTML是几MB.通过减少无关的HTML,我们在减少修改方面取得了很大进展,但我想知道是否有任何方法可以在这些动态.asp页面上启用GZIP压缩.我确信压缩它们对文件大小是一个巨大的好处.
我见过的所有GZIP压缩信息只涉及支持文件或.aspx页面.
谢谢.
.net ×2
asp.net ×2
c# ×2
dapper ×2
rest ×2
activex ×1
asp-classic ×1
compression ×1
events ×1
gzip ×1
http ×1
javascript ×1
security ×1