我有以下字符串,其中我试图获取StatusCode:
值,输出应该是409
..我尝试如下但不起作用,这是正确的方法吗?< / p>
string output = 'QLASR: Bad Response Conflict StatusCode: 409, ReasonPhrase: 'Improper Software Product Build Name already present in the database', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Pragma: no-cache Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Cache-Control: no-cache Date: Tue, 11 Jul 2017 22:18:26 GMT Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Length: 68 Content-Type: text/plain; charset=utf-8 Expires: -1 }'
output.Any(x => x.Equals(StatusCode))
答案 0 :(得分:2)
您不应该首先使用此字符串。这是一个improperly read HttpResponseMessage。有些代码在某处发出HTTP请求,从那里你可以调用访问响应的StatusCode属性:
httpClient = new HttpClient();
var response = await httpClient.GetAsync("...");
var statusCode = response.StatusCode;
答案 1 :(得分:0)
const string statusCodeIdentifier = "StatusCode:";
var outputWithoutSpaces = output.Replace(" ", "");
var statusCodeIndex = outputWithoutSpaces.IndexOf(statusCodeIdentifier);
var parsedCode = outputWithoutSpaces.Substring(statusCodeIndex + statusCodeIdentifier.Length, 3);
不是最漂亮的,这假设状态代码总是3位数。但假设你的字符串总是这种格式,它应该可以工作。
您在评论中提到输出应该是JSON。虽然你的示例字符串中的情况并非如此。如果它实际上是JSON,那么我会使用Newtonsoft.JSON来反序列化对象并以这种方式处理它。它更容易管理。
答案 2 :(得分:0)
您可以找到StatusCode:
的索引,使用该索引并查找该索引中的子字符串到,
的索引(您必须使用StatusCode:
的长度来获取价值)
答案 3 :(得分:0)
正则表达式似乎是最好的选择。
int statusCode = 0;
string output = 'QLASR: Bad Response Conflict StatusCode: 409, ...'
string pattern = @"StatusCode\:\s?(\d+)";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(output);
if (m.Success)
{
statusCode = (int)m.Groups[1].Value;
Debug.WriteLine(statusCode);
}
此正则表达式查找&#39; StatusCode&#39;后跟一个冒号,后跟一个空格(或不是空格),后跟多个数字。 括号允许您对事物进行分组。
因此,当执行此正则表达式时,它会匹配您的输出并找到&#39; StatusCode:409&#39;。然后,我们使用包含括号内的值的组1来获取所需的状态代码。 (组0 =整场比赛;所以那将是&#39; StatusCode:409&#39;)
但 tbh ,您的输出&#39;看起来像HttpClient的响应代码。 我确信响应的StatusCode属性可以公开访问。