我对C#比较新,我正在尝试创建一个静态类,我可以用这种方式将一些url存储为字符串:
func xmlRequest(_ id:Int, completion: @escaping (_ response:AnyObject) -> (), failure onFailure:@escaping (_ error:String, _ statusCode:NSInteger) -> ()){
/*
Your code
*/
AlamofireXMLRPC.request(url, methodName: "execute_kw", parameters: param3).responseXMLRPC { (response: DataResponse<XMLRPCNode>) in
switch response.result {
case .success(let value):
completion("success")
case .failure(let error):
onFailure("error", error)
}//switch end
}
}
然后我想在我的Http请求中调用它:
namespace ServerUrls
{
public static class ServerUrls
{
public static string serverUrl { get { return "https://url"; } }
}
}
但这不起作用。这是一种错误的方法吗?我在这里做错了什么?
修改
我正在使用flurl作为我的http请求:
using ServerUrls
...
var result = await serverUrl
这项工作我只是想将我的网址存储在一个单独的类
中答案 0 :(得分:0)
如果您不在同一个班级,则必须在字段前加上类名...
所以例如ServerUrls.serverUrl
此外,您还必须使用HttpClient或其他东西来下载网址;
WebClient client = new WebClient();
string reply = client.DownloadString(ServerUrls.serverUrl);
Console.WriteLine(reply);
答案 1 :(得分:0)
您必须指定类的名称和所需字符串的名称。
所以你会做
var string = ServerUrls.serverUrl;
正如Fabjan在评论中指出的那样,您必须采取一些解决方法来使用HttpClient
来处理您的请求。
答案 2 :(得分:0)
不要对字符串常量使用属性,因为C#允许您使用专门为此目的设计的语法创建命名字符串常量:
public class CommonUrls {
public const string Server = "https://url";
}
现在您可以按如下方式使用此常量:
using (var client = new WebClient()) {
var bytes = await client.DownloadDataTaskAsync(CommonUrls.Server);
...
}
答案 3 :(得分:0)
您不能指望它知道您想要对该字符串发出HTTP请求,因为它的格式是这样的。您的编译器只是将其视为字符串,而不是URL。
因此,您必须使用其他方法来生成请求,例如.NET Framework的HttpClient
本机:
public async void MakeRequest()
{
var http = new HttpClient();
var response = await http.GetAsync(ServerUrls.serverUrl);
response.EnsureStatusSuccessCode(); //Throws an exception if status code isn't 200.
var html = await response.Content.ReadAsStringAsync();
}
答案 4 :(得分:0)
既然您已经添加了Flurl,那么您想要实现的目标就更清楚了(并且您不希望等待字符串,但是正在创建的任务中该库的扩展方法链。)
您只需更换该硬编码网址即可使用ServerUrls
中GetList()
课程中的该网址:
var result = await ServerUrls.serverUrl
.AppendPathSegments()
...
如果通过向GetList()
添加string
参数,然后将所需的网址从ServerUrls
传递给它,public async Task<List<T>> GetList(string url)
{
var result = await url
.AppendPathSegments()
...
}
会更灵活,那就更好了。
Task<List<myList>>
此外,请确保您拥有正确的返回类型,因为myList
没有意义 - 将string
替换为所需的类型(例如{
"{c156e78e-a4ac-422b-bf86-afe12f548dfb}": {
"name": "after-gluster3.8",
"date": "2017-04-16 14:31:20",
"state": "poweron",
"current": false,
"parent": ""
}
,
"{d773d5b7-94d4-4f78-a943-f50e4eb68fe0}": {
"name": "after-sshd-fixes",
"date": "2017-04-16 16:58:32",
"state": "poweroff",
"current": true,
"parent": "{c156e78e-a4ac-422b-bf86-afe12f548dfb}"
}
}
)。