我正在为即将推出的门户网站生成一个页面,我有一个带有一些可选内容的HTML元素.如果元素为空,我希望元素不呈现,但是为它添加一些填充会导致它呈现.如何向内容添加填充,但仅限于内容存在?
.someElement{padding-top: 5px;}
Run Code Online (Sandbox Code Playgroud)
有问题的HTML:
<div class="someElement">With padded content</div>
<div class="someElement"><!-- shouldn't render since it has no content --></div>
Run Code Online (Sandbox Code Playgroud)
基本上,我希望上面的第二个元素不占用任何空间.我正在使用XHTML 1.1 doctype在所有主流浏览器中进行测试.
我很确定"Expires"是有效的HTTP Response Header类型.但是当我尝试在我的代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中)
actionExecutedContext.Response.Headers.Add("Expires", (DateTime.Now + Timespan.FromDays(7)).ToString("R"));
Run Code Online (Sandbox Code Playgroud)
我最终得到一个例外:
InvalidOperationException:未使用的标头名称.确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用.
我漂亮的REST网络服务很棒.除非我访问类似的页面~/
,它返回默认的IIS 403 Forbidden页面(即使使用Fiddler并仅指定Accept: application/json
).我只想要JSON或XML错误.有没有办法用自定义异常处理程序覆盖所有异常?或者一个默认的控制器来处理所有未知请求?什么是最简单,最正确(如果不同)的方法来处理这个问题,以便客户端只需要解析REST API友好的XML数据报或JSON blob?
示例请求:
GET http://localhost:7414/ HTTP/1.1
User-Agent: Fiddler
Host: localhost:7414
Accept: application/json, text/json, text/xml
Run Code Online (Sandbox Code Playgroud)
回复:(我不喜欢,注意这text/html
不是可接受的响应类型之一)
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcaWNhcm9sXENoYXJpdHlMb2dpYy5pQ2Fyb2wuQXBp?=
X-Powered-By: ASP.NET
Date: Fri, 25 Jan 2013 21:06:21 GMT
Content-Length: 5396
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IIS 8.0 Detailed Error - 403.14 - Forbidden</title>
<style type="text/css">
<!--
...
Run Code Online (Sandbox Code Playgroud)
回复(我更喜欢):
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: application/json; charset=utf-8 …
Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET WebAPI项目.我最近为我的所有数据表创建了EntityFramework实体.但我不想将我的数据层和架构公开给我的用户.如何将我的实体映射到ViewModel(automapper?)并提供IQueryable返回类型,以便我的API支持OData?
OData支持查询组合和类似SQL的参数.我想我需要为查询组合部分提供某种双向翻译?这是否意味着自定义LINQ提供程序?我希望它比那更容易.
或者我应该放弃IQueryable/OData?
我对WCF样本真的不感兴趣.我发现的DotNetOpenAuth实现也不完整或假设为WCF.我发现Thinkitecture.IdentityServer.45不是轻量级的,不适合构建我的新WebAPI项目.我甚至发现Oauth2DotNet项目几乎没有真正的信息.
微软已发布了一些 Oauth/OpenID相关项目,但我甚至找不到适合这些项目的文档.
我的项目:创建一个新站点,为使用.NET 4.5和ASP.NET WebAPI的授权移动应用程序提供"REST样式"API服务.由于这些应用程序不一定必须代表用户行事,我们认为"双腿"Oauth是可以接受的,因为我们希望能够在特定应用程序退出时关闭并拒绝访问我们的API.手.
在所有这些中,我花了一周时间尝试使基本实现工作,但甚至无法识别各种令牌类型以及构成令牌本身的内容.这真的不应该那么困难,我发现缺乏有关主题的基本信息非常令人沮丧.是的,这些规格已经公布,但是它们没有被提炼出来并准备好实施.
我希望扩展到与WepAPI的Authenticate属性正确集成的理想解决方案,可能作为ActionFilter/AuthorizationFilter,这样我就可以在尝试授权访问一个或多个优雅的REST-ful API方法之前识别和验证远程应用程序.
哪里是"入门"?
我非常喜欢使用命名参数而不是基于字符串的参数注入.它对大多数形式的SQL注入都是类型安全且安全的.在旧的ADO.NET中,我会为我的查询创建一个SqlCommand对象和一堆SqlParameters.
var sSQL = "select * from Users where Name = @Name";
var cmd = new SqlCommand(conn, sSQL);
cmd.Parameters.AddWithValue("@Name", "Bob");
cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
现在,在Entity Framework中,它(在此链接上)显示为已经回归到一个简单的String.Format语句和字符串注入:(简化讨论)
MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob");
Run Code Online (Sandbox Code Playgroud)
有没有办法在Entity Framework DbSqlQuery类中使用命名参数?
自动生成的测试客户端在ASP.NET Web API中的位置是什么?(MVC 4 beta的一部分)在WCF WebAPI中它位于global.asax中:
var config = new HttpConfiguration() { EnableTestClient = true, EnableHelpPage=true };
RouteTable.Routes.MapServiceRoute<MyService>("api/path", config);
Run Code Online (Sandbox Code Playgroud) 我不确定实时这个术语是否被滥用,但是这个想法是服务器上的许多玩家都有一个城市每秒产生n个资源.可能有一千个这样的城市.奖励所有玩家城市的最佳方式是什么?
当游戏"活着"时,这样的循环最好的方式是在无限循环中运行吗?(请用这种简单的逻辑忽略明显的错误)
foreach(City c in AllCities){
if(c.lastTouched < DateTime.Now.AddSeconds(-10)){
c.resources += (DateTime.Now-c.lastTouched).Seconds * c.resourcesPerSecond;
c.lastTouched = DateTime.Now;
c.saveChanges();
}
}
Run Code Online (Sandbox Code Playgroud) caching ×1
css ×1
html ×1
http-headers ×1
iis ×1
iqueryable ×1
oauth ×1
odata ×1
real-time ×1
sql ×1
wcf-web-api ×1
web-services ×1