使用RestSharp的典型http调用如下所示:
var client = new RestClient("http://exampleapi.com");
var request = new RestRequest("someapi", Method.GET);
IRestResponse response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)
来自https://github.com/restsharp/RestSharp/wiki/Getting-Started上的文档:
如果存在网络传输错误(网络中断,DNS查找失败等),则RestResponse.Status将设置为ResponseStatus.Error,否则将为ResponseStatus.Completed.如果API返回404,则ResponseStatus仍将完成.如果您需要访问返回的HTTP状态代码,您可以在RestResponse.StatusCode中找到它.
此外,以下似乎是RestSharp响应的行为:
response.ErrorException则将填充一些Exception派生类型,response.ErrorMessage并将包含一些消息错误字符串和response.StatusCode将被设置为ResponseStatus.Error,Response.Status.Aborted,ResponseStatus.TimedOut,等.response.StatusCode将设置NotFound等,Response.ErrorException并Response.Error会null与response.StatusCode将被设置为"ResponseStatus.Completed`.我可能错过了一些可能的回应,但我认为要点就在那里.
鉴于此,我应该如何确定响应的成功或失败?选项包括:
ErrorException == null那么检查http响应response.ResponseStatus == ResponseStatus.Completed然后检查Response.StatusCode并根据结果获取响应数据并相应处理,如果不是您期望的ErrorException我不想过分反思这一点,但我假设有一个模式(缺乏更好的术语)来干净利落地处理这个问题.
这是我"学习"如何操作的页面:https://stormpath.com/blog/token-authentication-asp-net-core
但对我来说这不起作用(也不适用于Fiddler)我的ApplicationUser模型有这个控制器:
[Authorize] //works when it's not set, doesn't work when it's set
[Route("api/[controller]")]
public class ApplicationUserController : Controller
{
private IRepository<ApplicationUser> _applicationUserRepository;
public ApplicationUserController(IRepository<ApplicationUser> applicationUserRepository)
{
_applicationUserRepository = applicationUserRepository;
}
[HttpGet("{id}")]
public ApplicationUser Get(int id)
{
return _applicationUserRepository.Get(id);
}
}
Run Code Online (Sandbox Code Playgroud)
并且我的RestSharp包装器可以获取所有应用程序用户:
public Task<T> GetResponseContentAsync<T>(string resource, int id) where T : new()
{
RestRequest request = new RestRequest($"{resource}/{{id}}", Method.GET);
request.AddUrlSegment("id", id);
if (!AuthenticationToken.IsNullOrEmpty(true))
{
request.AddHeader("Authorization", string.Format("Bearer {0}", AuthenticationToken));
_client.Authenticator = new JwtAuthenticator(AuthenticationToken);
_client.Authenticator.Authenticate(_client, request);
}
TaskCompletionSource<T> tcs …Run Code Online (Sandbox Code Playgroud) 我正在调试此代码并获得一个奇怪的"源未找到"页面,当调试器落在Jtoken行上时,该页面正在寻找名为ExecutionContext.cs的类.
ExecutionContext.cs未找到.
您需要找到ExecutionContext.cs查看当前调用堆栈帧的源.
(有关其他信息,请参见下文)
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
IRestResponse content = myApi.GetSomething();
JToken token = JObject.Parse(content.ToString());
MyClass myclass = token.ToObject<Myclass>();
Run Code Online (Sandbox Code Playgroud)
我也尝试用动态或var和相同的结果替换Jtoken.我用Google搜索了,除了MS文档之外什么都没有帮助修复.
有关如何执行此操作或至少抛出正常异常的任何建议我可以修复吗?
谢谢
找到'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的源代码.(无校验和.)文件'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'不存在.
查看'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的脚本文档...
查看'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的项目.在项目中找不到该文件.查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include \'...
查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\cvt \'...
查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\msclr \'...
查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\sys \'...
查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\thr \'...
查看目录'C:\ Program …
我正在构建一个Windows Phone 7 Silverlight应用程序.有没有理由使用RestSharp而不是WebClient?我在RestSharp网站上环顾四周,但它的好处并不是很明显.
我希望能够在控制器上调用身份验证操作,如果成功,则将经过身份验证的用户详细信息存储在会话中.
但是,我不确定如何将请求保留在会话中,因为我正在使用RestSharp作为分离的客户端.我需要以某种方式在成功授权后从服务器获取密钥,然后对于每个将来的呼叫,检查密钥与存储在会话中的密钥.
如何确保RestSharp中的RestClient发送所有未来请求并正确设置cookie,以便在服务调用内,可以正确检索会话变量?
我一直在用HttpFactory查看cookie容器,但似乎没有任何关于此的文档.
我正在使用RestSharp来使用REST Web服务,并将在短时间内进行大量调用.
API的文档强烈建议使用持久HTTP连接来执行此操作,但是我很难使用RestSharp.
我已经尝试在请求中添加"Connection:Keep-alive"标头,但是当我这样做时,请求失败并出现以下错误 - "可能无法使用此属性设置Keep-Alive和Close".
我可以不在RestSharp中使用此标头,或者我还需要做些什么才能启用它?
有人可以帮忙吗?谢谢.
我正在使用RestSharp(通过NuGet版本104.4)来调用Rest Web服务.我设计了一组对象(POCO),它匹配API中公开的资源.但是,我的对象属性名称与发布数据时Rest服务所期望的属性名称不匹配,所以当我向Rest服务发出请求以使它们匹配匹配时,我想"转换"它们.我读到SerializeAs在我的POCO属性上添加属性(指定了Name)将使它们正确序列化,但它不会.
我的POCO
Imports RestSharp.Serializers
<Serializable(), SerializeAs(Name:="ApiMember")>
Public Class ApiMember
<SerializeAs(Name:="id")>
Public Property Id As Integer?
<SerializeAs(Name:="email")>
Public Property EmailAddress As String
<SerializeAs(Name:="firstname")>
Public Property Firstname As String
<SerializeAs(Name:="lastname")>
Public Property Lastname As String
End Class
Run Code Online (Sandbox Code Playgroud)
我对API的呼唤
Dim request As RestRequest = New RestRequest(Method.POST)
Dim member As ApiMember = new ApiMember()
member.EmailAddress = "me@example.com"
request.Resource = "members"
request.RequestFormat = DataFormat.Json
request.AddBody(member)
Dim client As RestClient = New RestClient()
client.BaseUrl = "http://url.com"
client.Authenticator = New HttpBasicAuthenticator("username", "password") …Run Code Online (Sandbox Code Playgroud) 我是C#的新手,我正在尝试使用RestSharp从REST请求中获取JSON响应; 我想要执行的请求如下:"http://myurl.com/api/getCatalog?token=saga001".如果我在浏览器中执行它,它的效果很好.
我试过这个:
var client = new RestClient("http://myurl.com/api/");
var request = new RestRequest("getCatalog?token=saga001");
var queryResult = client.Execute(request);
Console.WriteLine(queryResult);
Run Code Online (Sandbox Code Playgroud)
我得到"RestSharp.RestReponse"而不是我正在跳跃的JSON结果.
谢谢你的帮助 !
我正在与RestSharp合作开展一个项目.随着时间的推移,我发现了RestResponse类可以抛出的几个异常,其中大部分是我必须处理的,所以我的应用程序不会崩溃.我如何知道所有可能的异常并单独处理它们.
我正在尝试使用DownloadData方法使用RestSharp下载文件(图像)
var client = new RestClient(baseUrl);
var request = new RestRequest("GetImage", Method.GET);
var response = client.DownloadData(request);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果请求返回错误,我无法看到HttpStatus代码.
我可以发出请求并检查状态:
var client = new RestClient(baseUrl);
var request = new RestRequest("GetImage", Method.GET);
var response = client.Execute(request);
var status = response.StatusCode;
Run Code Online (Sandbox Code Playgroud)
但后来我无法从Content属性中获取图像.
我错过了一些明显的东西吗?
restsharp ×10
c# ×7
rest ×4
json ×3
exception ×2
http ×2
.net ×1
access-token ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
http-headers ×1
keep-alive ×1
silverlight ×1
vb.net ×1