构建RESTful资源以重置密码的正确方法是什么?
此资源旨在成为丢失或忘记密码的人的密码重置程序.它使旧密码无效并通过电子邮件向他们发送密码.
我有两个选择:
POST /reset_password/{user_name}
Run Code Online (Sandbox Code Playgroud)
要么...
POST /reset_password
-Username passed through request body
Run Code Online (Sandbox Code Playgroud)
我很确定请求应该是POST.我没有信心选择一个合适的名字.而且我不确定是否应该通过URL或请求正文传递user_name.
我有一个Microsoft.Net.Http用于检索一些Json数据的服务.大!
当然,我不希望我的单元测试击中实际的服务器(否则,这是一个集成测试).
这是我的服务ctor(使用依赖注入......)
public Foo(string name, HttpClient httpClient = null)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我不知道我怎么可以......比如嘲笑这个.. Moq或FakeItEasy.
我想确保当我的服务电话GetAsync或PostAsync..然后我可以伪造这些电话.
有什么建议我怎么做?
我希望 - 我不需要制作我自己的Wrapper ..因为这是废话:(微软不能对此进行疏忽,对吧?
(是的,它很容易制作包装..我之前已经完成了它们......但这是重点!)
我正在构建一个给出HttpContent对象的函数,它将发出请求并在失败时重试.但是我得到异常,说HttpContent对象在发出请求后被处理掉.无论如何都要复制或复制HttpContent对象,以便我可以发出多个请求.
public HttpResponseMessage ExecuteWithRetry(string url, HttpContent content)
{
HttpResponseMessage result = null;
bool success = false;
do
{
using (var client = new HttpClient())
{
result = client.PostAsync(url, content).Result;
success = result.IsSuccessStatusCode;
}
}
while (!success);
return result;
}
// Works with no exception if first request is successful
ExecuteWithRetry("http://www.requestb.in/xfxcva" /*valid url*/, new StringContent("Hello World"));
// Throws if request has to be retried ...
ExecuteWithRetry("http://www.requestb.in/badurl" /*invalid url*/, new StringContent("Hello World"));
Run Code Online (Sandbox Code Playgroud)
(显然我不会无限期地尝试,但上面的代码基本上就是我想要的).
它产生了这个例外
System.AggregateException: One or more errors occurred. ---> System.ObjectDisposedException: …Run Code Online (Sandbox Code Playgroud) 我理解为什么"REST框架"供应商想要提供返回基于Json的表示和基于XML的表示的支持,但为什么人们想要从同一服务返回两者?
是因为您将拥有构建在没有可用Json解析器的平台上的客户端应用程序吗?
是因为您希望更广泛地采用界面,因为您可以吸引更多人?
是因为您认为所有RESTful接口遵循的 标准约定?
如果你确实交付了两个:
您是否避免使用XML中的命名空间以使其与Json格式兼容?或者您是否只有一个名称空间用于所有数据元素?
您是否有某种标准化机制将属性和元素映射到某种一致的Json格式,或者您只是避免XML中的属性?
您是为每个表示创建不同的端点,还是使用内容协商来提供所请求的格式?你有默认格式吗?
如果您在可编辑资源上使用缓存并使用不同的URL,那么如何确保当一个表示失效时其他表示也是无效的?
您觉得支持多种格式的好处是值得的吗?
所以主要原因似乎是偏好.一些开发人员更喜欢花括号,有些人更喜欢尖括号.
有些人希望从XML迁移到Json,因此需要支持两者才能实现向后兼容.
有些人想使用Json,但担心一些开发人员害怕Json,所以他们支持两者以免冒犯任何人.
在框架XYZ中很容易打开功能,为什么不呢!
另一个有趣的建议原因是,JSON可以用来提供快速的脏数据摘要,XML可以用作语义丰富的完整表示.
我正在使用ASP.Net Web Api实现RESTful Web服务.我已经得出结论,使用基本身份验证+ SSL来执行身份验证部分.实现它的最佳/正确方法是什么?
我的第一次尝试是手动执行,解析Authorization标头,根据我的数据库解码和验证用户.它有效,但我想知道我是否遗漏了一些东西.
我见过一些使用用户角色和主体的解决方案.虽然我不确定这些实际上做了什么,但我几乎肯定我不需要这些,因为在我的数据库中我定义了自己的用户和他们的角色.
我还没有完全理解的是,服务的消费者是否必须在每个请求中发送凭据,或者以某种方式缓存它们.我的服务是否应该为了实现这一点而做某事,或者完全取决于消费者来处理这个问题?
关于客户端使用javascript发出请求的最后一个问题.如果他们尝试使用该服务,是否会出现"跨域请求"问题?
我有一些文件要上传,一些文件失败,因为帖子是异步的而不是同步的..
我正在尝试将此调用作为同步调用..
我想等待回应.
如何将此调用设为同步?
static async Task<JObect> Upload(string key, string url, string
sourceFile, string targetFormat)
{
using (HttpClientHandler handler = new HttpClientHandler {
Credentials = new NetworkCredential(key, "")
})
using (HttpClient client = new HttpClient(handler))
{
var request = new MultipartFormDataContent();
request.Add(new StringContent(targetFormat), "target_format");
request.Add(new StreamContent(File.OpenRead(sourceFile)),
"source_file",
new FileInfo(sourceFile).Name);
using (HttpResponseMessage response = await client.PostAsync(url,
request).ConfigureAwait(false))
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync().ConfigureAwait(false);
return JsonObject.Parse(data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!
这是我的理解:
这些信息是否正确?如果没有,有人能用简单的术语解释什么是Swagger,Swashbuckle和Swashbuckle UI意味着什么?
另外,如果我不使用它,我作为API开发人员会失去什么?
使用新的WCF Web API而不是ASP.NET MVC 3来公开轻量级JSON Web服务层有什么优势?我在很多方面都喜欢Web API,但缺点是它不能在单声道上工作,而MVC 3则可以.这两种方法有哪些主要区别?
OData是微软重新打包其Astoria(现在的WCF数据服务)RESTful查询/更新协议.如果我想使用Java创建兼容OData的数据源,我该怎么做?同样,如果我想从Java使用OData数据源,我该怎么做?
部分答案如下.
OData网站建议Restlet支持OData.Restlet的API文档提到了org.restlet.ext.odata包.
www.restlet.org/
www.restlet.org/documentation/snapshot/jee/ext/org/restlet/ext/odata/package-summary.html
这是唯一的答案吗?是否有关于进行此集成的博客文章?
我在使用HttpClient和BaseAddress属性调用webHttpBinding WCF端点时遇到问题.
HttpClient的
我创建了一个HttpClient实例,将BaseAddress属性指定为本地主机端点.

GetAsync Call
然后我调用GetAsync方法传递额外的Uri信息.
HttpResponseMessage response = await client.GetAsync(string.Format("/Layouts/{0}", machineInformation.LocalMachineName()));
Run Code Online (Sandbox Code Playgroud)

服务端点
[OperationContract]
[WebGet(UriTemplate = "/Layouts/{machineAssetName}", ResponseFormat = WebMessageFormat.Json)]
List<LayoutsDto> GetLayouts(string machineAssetName);
Run Code Online (Sandbox Code Playgroud)
问题
我遇到的问题是,是,/AndonService.svc所述BaseAddress的一部分被截断,从而将得到的呼叫转到https://localhost:44302/Layouts/1100-00277宁可https://localhost:44302/AndonService.svc/Layouts/1100-00277导致404未找到.
是否有理由在GetAsync调用中截断BaseAddress?我该如何解决这个问题?
c# ×4
rest ×4
.net ×3
wcf ×2
astoria ×1
httpcontent ×1
httpresponse ×1
java ×1
json ×1
mocking ×1
odata ×1
openapi.net ×1
restlet ×1
swagger ×1
swagger-ui ×1
swashbuckle ×1
wcf-web-api ×1
web-services ×1
xml ×1