静态字符串工厂

时间:2017-04-28 10:28:37

标签: c#

我对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

这项工作我只是想将我的网址存储在一个单独的类

5 个答案:

答案 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,那么您想要实现的目标就更清楚了(并且您不希望等待字符串,但是正在创建的任务中该库的扩展方法链。)

您只需更换该硬编码网址即可使用ServerUrlsGetList()课程中的该网址:

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}" } } )。