我对REST API有一点了解.据我所知,它用于处理HTTP服务(GET POST PUT DELETE).
当我添加一个webapi控制器时,它为我提供了一些基本方法,如:
public class Default1Controller : ApiController
{
// GET api/default1
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/default1/5
public string Get(int id)
{
return "value";
}
// POST api/default1
public void Post([FromBody]string value)
{
}
// PUT api/default1/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/default1/5
public void Delete(int id)
{
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是Web API和REST API之间的区别是什么?
从rest定义开始,上面的代码基于REST,那么MVC中的普通Web API是什么?我有点困惑,因为有些人说你使用REST api的web api吗?
请提供对两者的更好理解.
从 ASP.NET API 中的 .NET 6 开始,如果要获取DateOnly(或TimeOnly) 作为查询参数,则需要单独指定其所有字段,而不是仅提供字符串(“2021-09-14”或“10: 54:53" 为TimeOnly) 就像你可以为 一样DateTime。
如果它们是正文的一部分,我可以通过添加自定义 JSON 转换器 ( AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(...))) 来解决这个问题,但它不适用于查询参数。
我知道这可以通过模型绑定器修复,但我不想为每个包含DateOnly/TimeOnly. 有没有办法广泛修复这个应用程序?
演示:
假设您有以下操作:
[HttpGet] public void Foo([FromQuery] DateOnly date, [FromQuery] TimeOnly time, [FromQuery] DateTime dateTime)
下面是它在 Swagger 中的表示方式:
我希望它表示为三个字符串字段:一个 for DateOnly、一个 forTimeOnly和一个 for DateTime(这个已经存在)。
PS:这不是 Swagger 问题,而是 ASP.NET 问题。如果我尝试?date=2021-09-14手动传递,ASP.NET 将无法理解它。
有没有办法在EF Core RC 2中执行此代码的操作?
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用EF Core 2.1.0的ASP.NET Core 2.1.0应用程序.
如何使用Admin用户为数据库播种并为其授予管理员角色?我找不到任何关于此的文件.
在Entity Framework 7中,当我尝试应用迁移时,我收到错误
在表'ChangeOrder'上引入FOREIGN KEY约束'FK_ChangeOrder_User_CreatedByID'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
无法创建约束.查看以前的错误.
我知道在旧版本的Entity Framework中你可以通过添加来解决这个问题
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Run Code Online (Sandbox Code Playgroud)
到DbContext,但在EF7 modelBuilder似乎没有.Conventions它和谷歌只返回旧的EF 4虽然EF 6结果.
如何ON DELETE NO ACTION在Entity Framework 7中具体约束?
编辑:奥列格提供的答案显然是按照外键进行的,但是我想在全局范围内进行,因为使用一行代码来全局声明这一点会更容易,然后必须为每一个代码指定代码.我将最终拥有数百种关系.
编辑2:奥列格的代码
public class ChangeOrder
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public Int16? ApprovedByID { get; set; }
public Byte ApprovalStatusID { get; set; }
public Int16 AssignedToID { get; set; }
public Int16 CreatedByID { get; set; }
public Byte CurrentStatusID { get; set; } …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的IMultiValueConverter,它只是OR的两个值.在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值.
<MultiBinding Converter="{StaticResource multiBoolToVis}">
<Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
<Binding Path="ConditionB"/>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
和逆变器:
public class BoolInverterConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool)
{
return !((bool)value);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
当我包含boolInverter时,MultiValueConverter中的第一个值变为"DependencyProperty.UnsetValue".当我不使用转换器时没有问题(当然,除了我不是针对的逻辑).
我错过了什么吗?单步执行调试器会显示InverseBoolConverter正在反转我传递的值,但该值不会被"发送"到MultiValueConverter.
使用Xamarin.Android和Xamarin.iOS,我现在需要共享代码部分中的当前操作系统.无论是enum,int还是字符串,都没关系.
我试过这个:
System.Environment.OSVersion
Run Code Online (Sandbox Code Playgroud)
对于某些内核版本信息,它始终是"Unix".
有关于Android的信息,例如
Android.OS.Build.VERSION
Run Code Online (Sandbox Code Playgroud)
但它需要在Android特定代码部分.有没有办法知道公共库中的当前操作系统?
有没有简单的方法绑定到DataTemplate中的ToString()方法?我希望TextBlock的Text属性默认使用ToString()作为Text属性,但这不会发生.所以任何简单的方法:
<DataTemplate x:Key="myTemplate">
<TextBlock Text="{Binding ToString()}"/>
<DataTemplate>
Run Code Online (Sandbox Code Playgroud) 我配置log4net以使用复合RollingFileAppender,以便当前文件始终命名为logfile.log,所有后续文件都命名为logfile-YYYY.MM.dd.seq.log,其中seq是序列号,如果日志超过特定大小在一天之内.不幸的是,我在配置这样的设置方面收效甚微.
编辑:
我当前的配置粘贴在下面.它已根据几个答案进行了更新,使我足够接近我的需求.这将生成以下格式的文件:logfile_YYYY.MM.dd.log.seq
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\\logfile"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyy.MM.dd".log""/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="75KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)
一个有趣的说明,设置
<staticLogFileName value="false"/>
Run Code Online (Sandbox Code Playgroud)
为true会导致记录器不写入任何文件.
我有一个最初使用beta位的web api服务,我已经使用候选版本位进行了重建,现在我遇到了这个问题.
我有一个POST操作,它将复杂选项作为唯一参数.当我以json格式发送请求时,对象按预期反序列化,但如果我发送XML而不是参数为null.
在测试版中,我通过禁用模型绑定来解决这个问题,如Carlos Figueira的博客文章" 禁用ASP.NET Web API Beta上的模型绑定"中所述
然而,在RC中,他们已经删除了此方法正在实现的IRequestContentReadPolicy.
我的行动:
public List<Models.Payload> Post([FromBody]Models.AimiRequest requestValues)
{
try
{
if (requestValues == null)
{
var errorResponse = new HttpResponseMessage();
errorResponse.StatusCode = HttpStatusCode.NotFound;
errorResponse.Content = new StringContent("parameter 'request' is null");
throw new HttpResponseException(errorResponse);
}
var metadataParams = new List<KeyValuePair<string, string>>();
foreach (Models.MetadataQueryParameter param in requestValues.Metadata)
{
metadataParams.Add(new KeyValuePair<string, string>(param.Name, param.Value));
}
List<Core.Data.Payload> data = _payloadService.FindPayloads(metadataParams, requestValues.ContentType, requestValues.RuleTypes);
var retVal = AutoMapper.Mapper.Map<List<Core.Data.Payload>, List<Models.Payload>>(data);
return retVal; // new HttpResponseMessage<List<Models.Payload>>(retVal);
}
catch (System.Exception ex) …Run Code Online (Sandbox Code Playgroud) c# ×9
wpf ×2
xaml ×2
.net-6.0 ×1
api ×1
asp.net-core ×1
composite ×1
datatemplate ×1
ef-core-2.1 ×1
log4net ×1
pluralize ×1
rest ×1
tablename ×1
xamarin ×1
xamarin.ios ×1
xml ×1