@GET("user/token/")
Observable<String> gToken(@Url String url, @Query("usertype") int userType);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Process: com.gouhuoapp.say, PID: 12519
rx.exceptions.OnErrorNotImplementedException: @Url cannot be used with @GET URL (parameter #1)
for method ApiService.getToken
at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:386)
at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:383)
at rx.internal.util.ActionSubscriber.onError(ActionSubscriber.java:44)
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:153)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115)
at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:216)
at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:139)
at rx.observers.SerializedObserver.onNext(SerializedObserver.java:91)
at rx.observers.SerializedSubscriber.onNext(SerializedSubscriber.java:94)
at rx.internal.operators.OperatorTakeUntil$1.onNext(OperatorTakeUntil.java:45)
at rx.internal.operators.OperatorThrottleFirst$1.onNext(OperatorThrottleFirst.java:53)
at com.jakewharton.rxbinding.view.ViewClickOnSubscribe$1.onClick(ViewClickOnSubscribe.java:23)
at android.view.View.performClick(View.java:4909)
at android.view.View$PerformClick.run(View.java:20390)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:5784)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
Caused by: java.lang.IllegalArgumentException: @Url cannot be used with @GET …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置kestrel,以便当它处于原始模式时,它会在特定端口上运行.但是为了这样做,似乎launchsettings.json需要通过命令行参数来执行此操作,因为没有直接选项,它总是在端口5000上运行,如果你有一个需要运行的api和一个网站,这显然会发生冲突.
所以我将CommandLine包添加到我的站点,你确实可以在startup.cs文件中使用builder.AddCommandLine().
问题是如何从program.cs到Startup.cs获取args或者查看静态变量以外的其他方法.
如果你不能得到args,那种扩展方法会毫无意义.
有没有更好的方法呢?
目前我有这个要求:
await url
.SetQueryParams(queryString)
.SetClaimsToken()
.GetJsonAsync<T>()
Run Code Online (Sandbox Code Playgroud)
我现在想开始使用Polly(https://github.com/App-vNext/Polly)来处理重试并提供更好的用户体验.例如,由于网络连接不良,第一次尝试时不会"挂断"用户.这是我尝试使用的示例:
int[] httpStatusCodesWorthRetrying = { 408, 500, 502, 503, 504 };
Policy
.Handle<HttpException>()
.OrResult<HttpResponse>(r => httpStatusCodesWorthRetrying.Contains(r.StatusCode))
.WaitAndRetryAsync(new[] {
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(3)
})
.ExecuteAsync( await url... )
Run Code Online (Sandbox Code Playgroud)
但它需要HttpResponse是返回类型.正如你从我的Flurl例子中看到的那样,它正在返回T,即使它是一个HttpResponse.这T只是用于反序列化的类型StringContent.
第一个例子根本不起作用,因为我在PCL中使用它并且我无法获得对它的引用System.Web.所以我尝试了这个:
Policy
.HandleResult(HttpStatusCode.InternalServerError)
.OrResult(HttpStatusCode.BadGateway)
.OrResult(HttpStatusCode.BadRequest)
.WaitAndRetryAsync(new[] {
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(3)
})
.ExecuteAsync(async () =>
{
await url...
});
Run Code Online (Sandbox Code Playgroud)
但是这个也不起作用,因为Polly期望HttpStatusCode作为回归类型.所以我的问题是:我如何告诉polly处理那些HttpStatusCode并仍允许我返回类型T?
我已经阅读了许多文章,并认为我理解了这些概念,但是我的一小部分int无法从C#/ EF模块传递到SQL Server存储的proc。希望其他人都能发现问题所在。
我正在使用EF6、4.5 .Net Framework,SQL Server 2014
在数据库中,我创建了以下类型/过程:
CREATE TYPE [dbo].[IntsTTV] AS TABLE(
[Id] [int] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
请注意,存在名为“ Person”的表,其中包含列“ Id”(int)和“ LastName”(nvarchar),并具有数据。
CREATE PROCEDURE [dbo].[GetUsers]
@UserIds dbo.IntsTTV READONLY
AS
BEGIN
SELECT p.LastName
FROM [dbo].[Person] p
INNER JOIN @UserIds ids On p.Id = ids.Id;
END
Run Code Online (Sandbox Code Playgroud)
// C#代码
SqlMetaData[] columns = new SqlMetaData[1];
columns[0] = new SqlMetaData("Id", SqlDbType.Int);
SqlDataRecord row = new SqlDataRecord(columns);
row.SetInt32(0, 1); // Id of '1' is valid for the Person table
SqlDataRecord[] table = new SqlDataRecord[1];
table[0] …Run Code Online (Sandbox Code Playgroud) 似乎是一个很好的设计决策,System.Object.NET 中的类以及因此所有类提供了一种ToString()方法,毫不奇怪,它返回了对象的字符串表示.此外,在C#中,此方法是针对本机类型实现的,以便它们与类型系统很好地集成.
当需要用户交互时,这通常会派上用场.例如,对象可以直接保存在像列表这样的GUI小部件中,并"自动"显示为文本.
语言设计中没有提供类似通用object.FromString(string)方法的理由是什么?
其他问题和他们的答案讨论了可能的反对意见,但我发现它们并不令人信服.
解析可能会失败,而转换为字符串始终是可能的.
那么,这不会保留Parse()现有的方法,是吗?如果异常处理被认为是一种不合需要的设计,那么仍然可以定义一个TryParse()方法,该方法的标准实现System.Object只是返回false,但是对于有意义的具体类型,它被覆盖(例如,无论如何这种方法存在的类型).
或者,至少有一个IParseable接口可以声明一个ParseMe()或一个TryParse()方法,这是很好的ICloneable.
Tim Schmelter的评论"滚动你自己":这当然有效.但我不能为本机类型编写通用代码,或者说,IPAddress如果我必须解析值; 相反,我不得不求助于类型内省或编写实现自定义接口的包装器,这种接口要么维护不友好,要么单调乏味且容易出错.
Damien的评论:由于Eric Lippert 在此讨论的原因,接口只能声明非静态函数.这是一个非常有效的反对意见.无法在接口中指定静态方法.虚拟方法虽然需要一个虚拟对象,但它最好是一个kludge,最坏的情况下是不可能的(使用RAII).我几乎怀疑这是这种界面不存在的主要原因.相反,有一个复杂的类型转换框架,作为"静态接口"矛盾的解决方案提到的替代方案之一.TryParse()ParseMe(string)
但即使列出了反对意见,在类型系统或语言中缺少一般解析工具在我看来也是一种尴尬的不对称,因为ToString()存在一种通用方法并且非常有用.
那是在语言/ CLR设计期间讨论过的吗?
我总是在我的 catch 结构中添加一个变量:
catch (Exception e)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
即使我不在ecatch 块中使用。我这样做是因为如果我在调试时输入“匿名”捕获,我不知道如何获取异常(及其详细信息)。
catch { /* ...how to get the exception from here ?... */ }
Run Code Online (Sandbox Code Playgroud)
如果异常未在 catch 块中使用,我会收到 CS0168 警告:“变量 e 未使用”
我知道如何全局禁用 CS0168(或本地),但我宁愿不必这样做,因为它也可以隐藏有用的消息。
我宁愿不必在块中添加假代码来使用异常,这样它就不会引发警告。
我宁愿不根据它在 catch 块中的(非)用法编辑/删除参数,只是为了删除警告。
理想情况下,我想知道如何在调试时获取异常的实例。
我已经使用C#在.NET Core 2中创建了一个API。它返回ActionResult带有状态代码和字符串消息的。在另一个应用程序中,我使用Flurl调用API。我可以获取状态码号,但是找不到消息的方式。我如何获取消息,或者需要什么更改API才能以某种方式将消息放入Flurl即可获取?
这是API的代码。在此示例中,“消息”为“对不起!”。
[HttpPost("{orderID}/SendEmail")]
[Produces("application/json", Type = typeof(string))]
public ActionResult Post(int orderID)
{
return StatusCode(500, "Sorry!");
}
Run Code Online (Sandbox Code Playgroud)
这是另一个调用API的应用程序中的代码。我可以使用获取状态代码编号(500),(int)getRespParams.StatusCode并使用获取状态代码文本(InternalError)getRespParams.StatusCode,但是如何获得“抱歉!” 信息?
var getRespParams = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail".PostUrlEncodedAsync();
int statusCodeNumber = (int)getRespParams.StatusCode;
Run Code Online (Sandbox Code Playgroud) c# ×5
flurl ×2
.net ×1
.net-core ×1
api ×1
api-design ×1
asp.net-core ×1
get ×1
httpresponse ×1
java ×1
parsing ×1
polly ×1
retrofit2 ×1
sql-server ×1
tostring ×1
url ×1