我正在尝试为MVC站点设置自定义错误.我有404页面工作正常,但在测试服务器错误时,我得到默认消息:
很抱歉,在执行您的要求时发生了一个错误.
而不是我的自定义页面.
我在web.config中设置了这个:
<customErrors mode="On" defaultRedirect="~/Error/500">
<error statusCode="404" redirect="~/Error/404" />
<error statusCode="500" redirect="~/Error/500" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
我的错误控制器如下:
public class ErrorController : Controller
{
[ActionName("404")]
public ActionResult NotFound()
{
return View();
}
[ActionName("500")]
public ActionResult ServerError()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在500通过在我的一个视图中抛出异常来测试错误页面:
[ActionName("contact-us")]
public ActionResult ContactUs()
{
throw new DivideByZeroException();
return View();
}
Run Code Online (Sandbox Code Playgroud)
为什么只处理404错误?如何显示错误页面以查找500错误?
我正在尝试向Basecamp API提出一个简单的请求,我正在按照提供的说明添加示例用户代理和我的凭据,但我一直收到403 Forbidden回复.
我的凭据肯定是正确的,所以我的请求/凭据设置不正确的情况?
这就是我所拥有的(删除个人信息):
var httpClient = new HttpClient();
var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("User-Agent", "MyApp [EMAIL ADDRESS]") });
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "[USERNAME]", "[PASSWORD]"))));
var response = await httpClient.PostAsync("https://basecamp.com/[USER ID]/api/v1/projects.json", content);
var responseContent = response.Content;
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
Console.WriteLine(await reader.ReadToEndAsync());
}
Run Code Online (Sandbox Code Playgroud) CA1023:索引器不应该是多维的
索引器(即索引属性)应使用单个索引.多维索引器可以显着降低库的可用性.如果设计需要多个索引,请重新考虑该类型是否表示逻辑数据存储.如果没有,请使用方法.
要修复违反此规则的行为,请将设计更改为使用单个整数或字符串索引,或使用方法而不是索引器.
这对我来说似乎很奇怪,为什么这会对任何事情产生重大影响?除了使多维索引更不直观之外?
Change the design to use a string?用它做什么?在另一端解析数字并失去强打字?
有人可以告诉我为什么多维索引器有问题吗?
我正在尝试从简单的XML文档读取元素值并将它们绑定到一个对象,但是我遇到了我的XML文档的问题.我已经验证了它,并且可以确认文档本身没有问题,但是扩展了结果:
var nodes = from xDoc in xml.Descendants("RewriteRule")
select xmlSerializer.Deserialize(xml.CreateReader()) as Url;
Run Code Online (Sandbox Code Playgroud)
显示"XML文档中存在错误(0,0)"
内部异常读取 <RewriteRules xmlns=''> was not expected.
我不确定我在这里做错了什么?
我的XML如下:
<?xml version="1.0" encoding="utf-8" ?>
<RewriteRules>
<RewriteRule>
<From>fromurl</From>
<To>tourl</To>
<Type>301</Type>
</RewriteRule>
</RewriteRules>
Run Code Online (Sandbox Code Playgroud)
加载XML文件并尝试对其进行反序列化的代码: -
public static UrlCollection GetRewriteXML(string fileName)
{
XDocument xml = XDocument.Load(HttpContext.Current.Server.MapPath(fileName));
var xmlSerializer = new XmlSerializer(typeof(Url));
var nodes = from xDoc in xml.Descendants("RewriteRule")
select xmlSerializer.Deserialize(xml.CreateReader()) as Url;
return nodes as UrlCollection;
}
Run Code Online (Sandbox Code Playgroud)
我的Url对象类: -
[Serializable]
[XmlRoot("RewriteRule")]
public class Url
{
[XmlElement("From")]
public string From { get; …Run Code Online (Sandbox Code Playgroud) 我正在努力改善我们的一个网站PageSpeed见解得分,在我们徘徊的那一刻90,如果可能的话,我们想要进入90年代中期.
我们遇到的一个难点是,Ajax工具包脚本管理器正在页面顶部生成其脚本,谷歌将此标记为" 应该修复 "问题,并抱怨该脚本是渲染阻止,应该移动到页面底部或异步加载或通过defer属性加载.
我正在使用以下内容将我们的脚本合并到一个.js文件中以最小化请求:
<ajaxToolkit:ToolkitScriptManager ID="manScript" LoadScriptsBeforeUI="false" runat="server" EnableViewState="false" ScriptMode="Release">
<CompositeScript ScriptMode="Release" Path="/CMSGlobalFiles/Js/combinedajax.min.js">
<Scripts>
<asp:ScriptReference Name="WebForms.js" Path="/CMSGlobalFiles/Js/aspnet/WebForms.js" Assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<asp:ScriptReference Name="MicrosoftAjax.js" Path="/CMSGlobalFiles/Js/aspnet/MicrosoftAjax.js" />
<asp:ScriptReference Name="MicrosoftAjaxWebForms.js" Path="/CMSGlobalFiles/Js/aspnet/MicrosoftAjaxWebForms.js" />
</Scripts>
</CompositeScript>
</ajaxToolkit:ToolkitScriptManager>
Run Code Online (Sandbox Code Playgroud)
有没有办法设置defer或获得输出async的CompositeScript标签?或者将其移动到页面底部的任何其他方式?
我尝试过以下方法:
protected override void Render(HtmlTextWriter writer)
{
StringWriter output = new StringWriter();
base.Render(new HtmlTextWriter(output));
string outputAsString = output.ToString();
if(outputAsString.Contains("<script src=\"/CMSGlobalFiles/Js/combinedajax.min.js\" type=\"text/javascript\"></script>"))
{
outputAsString = outputAsString.Replace("<script src=\"/CMSGlobalFiles/Js/combinedajax.min.js\" type=\"text/javascript\"></script>", string.Empty);
}
writer.Write(outputAsString);
}
Run Code Online (Sandbox Code Playgroud)
然后手动在页面底部包含对脚本的引用:
<script …Run Code Online (Sandbox Code Playgroud) 我正在使用反射来查找 Newtonsoft 的泛型方法,JsonConvert.DeserializedObject<T>但我发现它返回了非泛型版本的不明确匹配JsonConvert.DeserializeObject,这是尝试获取泛型方法的代码:
return typeof(JsonConvert).GetMethod("DeserializeObject", new Type[] { typeof(string) }).MakeGenericMethod(genericType);
Run Code Online (Sandbox Code Playgroud)
我已经指定我想要将 astring作为其唯一参数的方法,但泛型和非泛型版本都有匹配的参数列表,并且我收到了不明确的匹配错误。
是否可以通过GetMethod这种方式获得通用版本?我知道我可以使用 Linq 并GetMethods()找到它,例如:
var method = typeof(JsonConvert).GetMethods().FirstOrDefault(
x => x.Name.Equals("DeserializeObject", StringComparison.OrdinalIgnoreCase) &&
x.IsGenericMethod && x.GetParameters().Length == 1 &&
x.GetParameters()[0].ParameterType == typeof(string));
Run Code Online (Sandbox Code Playgroud)
但这有点麻烦,一定有更好的方法。
我正在从 Azure AD Graph API 迁移到 Microsoft Graph,因为它现已弃用。以前可以使用Microsoft.Azure.ActiveDirectory.GraphClient .GetExtendedProperties();调用来访问用户的扩展属性,例如:
var client = new ActiveDirectoryClient(serviceRoot, async () => await GetToken());
var user = await client.Users["user id..."].ExecuteAsync();
var properties = user.GetExtendedProperties();
Run Code Online (Sandbox Code Playgroud)
我需要使用 中的等效调用来复制此内容Microsoft Graph。
我查看了schemaExtensions端点,例如:
获取所有扩展名:
/v1.0/schemaExtensions
但这似乎不会返回与 AD Graph 客户端相同的扩展数据。
使用 ext 获取用户:
v1.0/users/[user id]?$expand=extensions&$select=id,extension_[application id]_myExtension,onPremisesExtensionAttributes,displayName,jobTitle,identities
哪里extension_[application id]_myExtension有格式示例扩展:
extension_appid_extensionname
并且这不会返回用户的自定义扩展数据(但是其他属性工作正常)。
我们如何将扩展属性从 AD Graph 客户端迁移到 Microsoft Graph?
c# azure azure-active-directory azure-ad-graph-api microsoft-graph-api
我正在使用两个 API,它们用于从外部系统下载大型文档。
我使用有关要检索的文档的一些信息调用 API 1,然后 API 1 使用充当“中间人”的相同信息调用 API 2。API 1 获取文档二进制文件,然后将其传递给原始调用者。
我想避免的是创建代表这些文档的大量内存对象,并仅传递一个流作为响应,这可以通过所描述的设置(“中间人”API)实现吗?
我所拥有的基本示例(在 API 1 中):
var request = new HttpRequestMessage(HttpMethod.Post, "https://example.com/api/getdocs");
request.Content = parameters;
// 'ResponseHeadersRead' - indicate completion on reading of headers and not entire response...
var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
if (response.StatusCode == HttpStatusCode.OK)
{
var stream = await response.Content.ReadAsStreamAsync();
return this.Ok(stream);
}
else
{
// Logging/error handling...
}
Run Code Online (Sandbox Code Playgroud)
原始调用者将其响应作为流读取,然后传递给FileStreamResult在客户端计算机上下载文档的 a。
我的问题:
var stream = await response.Content.ReadAsStreamAsync()行是否仍在创建一个代表文档的大内存对象?HttpContent负责清理流吗?如果确实需要处理它,我该如何在仍然将流响应传递给调用者的同时执行此操作?(这可能吗?)我试图找回从代表所采取的路径URL列表URL X来URL Y这里X可能会被重定向几次.
例如:
这将重定向到:
然后重定向到:
有没有办法从响应对象中获取此重定向路径作为字符串: http://www.example.com/foo > http://www.example.com/bar > http://www.example.com/foobar
我可以通过ResponseUrieg 获取最终的URL
public static string GetRedirectPath(string url)
{
StringBuilder sb = new StringBuilder();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (var response = (HttpWebResponse)request.GetResponse())
{
sb.Append(response.ResponseUri);
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但这显然会在两者之间跳过URL.似乎没有一种简单的方法(或根本没有方法?)来获得完整的途径?
我在转发器内部为项目创建触发器时遇到了一些麻烦.我想一个Linkbutton控件从更新面板中触发回发,我在标记中为Button控件定义了一个触发器,该工具正常工作:
<Triggers>
<asp:PostBackTrigger ControlID="button" />
</Triggers>
Run Code Online (Sandbox Code Playgroud)
但是,LinkButton由于它们是动态创建的,我无法为s 执行此操作,只有解决方案是在我的repeater数据绑定事件中为每个按钮添加触发器,如下所示:
//Inside repeater itemdatabound...
var trigger = new PostBackTrigger();
trigger.ControlID = linkButton.UniqueID;
updatepanel.Triggers.Add(trigger);
Run Code Online (Sandbox Code Playgroud)
运行此代码时收到错误:
在UpdatePanel'updatepanel'中找不到ID为'ctl00 $ content $ repeater $ ctl01 $ linkButton'的控件.
如何为我的每个动态添加触发器LinkButtons?
c# ×10
asp.net ×3
.net ×2
ajax ×1
azure ×1
generics ×1
httpclient ×1
postback ×1
redirect ×1
reflection ×1
stream ×1
triggers ×1
updatepanel ×1
url ×1
xml ×1